Vue商店调度单个属性,而不是整个对象

时间:2019-02-12 20:23:27

标签: javascript vue.js ecmascript-6 vuejs2 vuex

我想知道是否有可能,仅将单个属性分配给vuex存储,而不是整个对象。 vuex docs中没有任何可能性。目前,我存储这样的对象:

store.dispatch('currentUser', {
  memberData: 'fooBar'
});

有时候,我只想从数据库中获取一个值并将其推入存储。有办法吗?

更新

我认为我的问题不清楚。

实际上,我需要在dispatch中访问memberData的子嵌套属性,以仅更改memberData的一个元素。老实说,响应是什么都没有关系。也可能是“ foo”。

1 个答案:

答案 0 :(得分:2)

如果您查看dispatch的文档,则第二个参数payload可以是任何类型。不一定是嵌套在属性中的对象样式的分发

发送:

store.dispatch('currentUser', response[0]);

商店:

state: {
  currentUser: undefined
},
mutations: {
  setCurrentUser(state, currentUser) {
    state.currentUser = currentUser;
  }
},
actions: {
  currentUser(context, payload) {
    context.commit('setCurrentUser', payload);
  }
}

突变:

setCurrentUser(state, currentUser) {
  state.currentUser = currentUser;
}

这是一个example正在起作用。

更新

如果目标是合并/更新更改,则可以在object literals中使用传播。 Vuex文档Mutations Follow Vue's Reactivity Rules中也提到了这一点。

发送:

store.dispatch('currentUser', { systemLanguage: response[0].systemLangId });

商店:

state: {
  memberData: { systemLanguage: 'foo' }
},
mutations: {
  updateCurrentUser(state, updates) {
    state.memberData = { ...state.memberData, ...updates };
  }
},
actions: {
  currentUser(context, payload) {
   context.commit('updateCurrentUser', payload);
  }
}

example在起作用。

希望有帮助!