interview
advanced-vue
Vue 如何监听对象或数组某个属性的变化

Vue 进阶面试题, Vue 如何监听对象或数组某个属性的变化?

Vue 进阶面试题, Vue 如何监听对象或数组某个属性的变化?

QA

Step 1

Q:: Vue 如何监听对象或数组某个属性的变化?

A:: 在 Vue 2 中,使用 Vue.set()this.$set() 方法来为新属性添加响应式特性。对于数组,使用 Vue.set() 或直接使用 Vue 提供的变异方法(如 push()pop()splice() 等)来确保变化是响应式的。在 Vue 3 中,reactive()ref() 可以帮助监听对象或数组的变化,而 Proxy 也实现了对对象的深度监听。

Step 2

Q:: 为什么在 Vue 2 中,直接给对象添加新属性不会触发视图更新?

A:: 在 Vue 2 中,Vue 通过 Object.defineProperty 的 getter 和 setter 来实现响应式系统,但它的限制是无法检测到对象新属性的添加或删除。这是因为 Object.defineProperty 只能劫持已经存在的属性。Vue 为了解决这个问题,引入了 Vue.set() 方法。

Step 3

Q:: 如何监听嵌套对象或数组内部属性的变化?

A:: 在 Vue 2 中,可以通过递归地使用 Vue.set() 来手动处理嵌套对象的响应式。在 Vue 3 中,reactive() 函数能够深度监听对象的所有层级变化。同时,toRefs() 可以帮助将嵌套对象中的每一个属性都转化为响应式的 ref 对象。

用途

监听对象或数组某个属性的变化在实际生产环境中非常重要,尤其是当数据结构复杂、状态管理困难时。通常在开发动态表单、表格数据处理、或复杂的数据交互时,需要实时地监听和响应数据的变化。这一机制可以确保用户界面的自动更新,避免手动操作 DOM,从而提高代码的可维护性和用户体验。在大型应用中,合理地使用响应式监听,可以帮助开发者更好地管理应用的状态,降低出现潜在 bug 的概率。\n

相关问题

🦆
Vue 中什么是计算属性 Computed Properties?

计算属性是基于响应式数据的派生值,具有缓存特性。只有当依赖的响应式数据发生变化时,计算属性才会重新计算,避免不必要的计算开销。

🦆
Vue 中 watch 和 computed 有什么区别?

computed 是基于依赖的数据进行缓存的,只有当依赖的数据发生变化时才会重新计算。watch 则是观察数据的变化并执行特定的回调函数,适用于需要在数据变化时执行异步操作或需要较大的开销的逻辑。

🦆
Vue 中如何优化大量数据的渲染?

可以使用虚拟滚动(Virtual Scrolling)技术,或者使用 v-showv-if 控制节点的渲染,以及合理拆分组件。key 的正确使用也能优化 DOM 操作,避免不必要的重新渲染。

🦆
如何在 Vue 中管理大型应用的状态?

可以使用 Vuex 进行集中式的状态管理,将所有组件的共享状态集中到一个全局的 store 中进行管理,提供单向数据流,提高可维护性。

🦆
Vue 组件之间如何通信?

可以使用 props 和 events 进行父子组件之间的通信,使用 Vuex 或者 event bus 进行跨组件的通信。Vue 3 中提供了 Composition API,可以利用 provide/inject 实现组件通信。