面试题答案
一键面试- 原因:对象新增属性未被Vue的响应式系统追踪。
- 解决方案:使用
Vue.set
(Vue2)或this.$set
(在Vue实例方法中),例如Vue.set(obj, 'newProp', 'newValue')
;在Vue3中可以使用reactive
函数重新创建响应式对象,或者使用ref
来包裹对象。
- 解决方案:使用
- 原因:数组通过索引直接修改元素,Vue无法检测到变化。
- 解决方案:使用数组的变异方法,如
this.$set(this.array, index, newVal)
(Vue2),或者在Vue3中使用toRaw
和reactive
重新创建响应式数组,也可以使用数组的splice
方法,如this.array.splice(index, 1, newVal)
。
- 解决方案:使用数组的变异方法,如
- 原因:在
created
钩子函数中,数据获取可能异步,此时DOM还未完全渲染,导致视图更新不及时。- 解决方案:可以使用
nextTick
方法,等待DOM更新后再进行操作。例如在Vue2中this.$nextTick(() => { // 操作DOM })
,Vue3中可以从vue
中导入nextTick
使用nextTick(() => { // 操作DOM })
。
- 解决方案:可以使用