本集合整理了涵盖从基础到高级的各种Vue.js前端面试题,旨在帮助开发者准备面试和提升技术能力。
Vue.js 是一款流行的前端框架,它的核心特性包括组件化、响应式数据绑定和便捷的数据管理。在面试中,Vue 的一些高级概念和技术细节是考察开发者技能的重要方面。这里我们将深入探讨 Vue 中 `computed` 与 `watch` 的区别以及 `keep-alive` 组件的使用,同时还会涉及 Vue 路由的实现原理。
1. **Vue 中的 `computed` 和 `watch` 的区别**:
- **`computed`** 是用来创建计算属性的,它是一个响应式的属性,基于其他数据属性计算得出结果。在模板中可以直接引用 `computed` 属性,当依赖的属性发生改变时,`computed` 会自动重新计算并更新视图。需要注意的是,`computed` 上的属性不能在 `data` 中声明,并且不允许包含异步操作。
- **`watch`** 则是对数据对象上的属性进行监听,当数据发生变化时执行相应的回调函数,通常用于处理更复杂的逻辑或异步操作。使用 `watch` 可以深度监听对象,并且可以设置是否深度比较(`deep`)以及是否立即执行(`immediate`)。
2. **`keep-alive` 组件的使用及其新特性**:
- `keep-alive` 是 Vue 内置的一个组件,主要用于缓存组件实例。当组件在切换过程中,通过 `keep-alive` 可以保持其状态,避免重复渲染。可以通过设置 `include` 和 `exclude` 属性来指定哪些组件需要被缓存或排除,并且可以使用 `max` 属性限制最多可缓存的组件数量。
- 结合 Vue Router 使用时,可以在路由元信息中设置 `keepAlive` 属性决定路由组件是否应该被缓存。
3. **Vue 路由的实现原理**:
- **Hash 模式**:URL 中的 `#` 符号用于标识哈希值。Vue 监听 `hashchange` 事件来实现路由跳转和页面更新,改变 `#` 后面的部分不会引发网络请求,适合不支持 HTML5 History API 的浏览器。
- **History 模式**:HTML5 提供的 `pushState` 和 `replaceState` API 允许在不刷新页面的情况下更改 URL。Vue 使用这些 API 实现无 `#` 的漂亮 URL,但需要服务器配置以处理所有路由请求,并将其重定向到根路径。
了解 Vue 中这些高级特性和工作原理对于展示你的技术深度至关重要。同时,双向绑定原理和 Vue 3.0 新特性如 Composition API 和 Teleport 等也需要不断学习掌握。