我有一个这样的数据结构,在store里有一个msgList的对象,属性是用户的username,要在每次这个用户发出一条消息记录时push一个新元素进去,并响应这个变化,同时更新当前对话记录。
https://cn.vuejs.org/v2/guide/list.html#
这是官方写的对于数组,对象属性更新检测的注意事项。我自己使用了其中的Object.assign(),来实现响应。
Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。
官方要求我们用这种写法:
vm.userProfile = Object.assign({}, vm.userProfile, {
age: 27,
favoriteColor: 'Vue Green'
})
是因为如果使用下列这种写法,只是复制了源目标的值,引用地址并没有变化,本质还是属性的修改,无法检测。而上面写法相当于换了一个对象,自然就能检测到。
Object.assign(vm.userProfile, {
age: 27,
favoriteColor: 'Vue Green'
})
预备知识讲完,进入正题。
在mutations里先按照普通写法,将userName作为一个对象的一个属性,并给属性赋值一个被放到数组里的payload对象。
const state={
msgList:{},//所有消息集合
};
const mutations={
updateMsgList(state,payload){
console.log(payload)
if(payload.bySelf===true){//我方发给对方 存储发送消息的To 作为username
if(!state.msgList[