问题
在给Vuex的对象添加属性时,申请computed的组件,对应的视图不会更新。
原因
因为Vuex只会跟踪所有在对象创建时就存在的属性。
之所以这样,是因为Vue监测数据的更新,是通过重写数据的set
函数,在有写入数据的时候,通知所有订阅者数据更新。而为对象添加属性并不会触发set
函数。
解决办法
可以创建一个新的对象,把原来对象的属性,和要添加的属性加到新的对象里。
let someObject = Object.assign({}, someObject, {newField: value})
Object.assign
这里用到了Object.assign()
函数,Object.assign()
可以快速的把多个对象的属性拷贝到第一个参数的对象中。
需要注意的是:
- 这种拷贝只是浅拷贝
- 在取出数据的时候调用getter,存到target上时候调用setter
- 如果后边的参数对象的属性名称和前边参数对象的属性名称相同,前边的值会被覆盖掉。