1、对象新属性无法更新视图,删除属性无法更新视图,怎么办?
原因:Object.defineProperty
没有对对象的新属性进行属性劫持对象新属性无法更新视图:使用Vue.$set(obj, key, value)
,组件中this.$set(obj, key, value)
删除属性无法更新视图:使用Vue.$delete(obj, key)
,组件中this.$delete(obj, key)
2、直接 arr[index] = xxx 无法更新视图怎么办?
原因:Vue 没有对数组进行Object.defineProperty
的属性劫持,所以直接arr[index] = xxx
是无法更新视图的使用数组的splice
方法,arr.splice(index, 1, item)
使用Vue.$set(arr, index, value)
3、相同的路由组件如何重新渲染?
多个路由解析为同一个 Vue 组件。问题是,Vue出于性能原因,默认情况下共享组件将不会重新渲染,如果你尝试在使用相同组件的路由之间进行切换,则不会发生任何变化。
const routes = [{path: "/a",component: MyComponent},{path: "/b",component: MyComponent},];
如果依然想重新渲染,怎么办呢?可以使用
key
<template><router-view :key="$route.path"></router-view></template>