javascript - Vue 存储调度单个属性而不是整个对象

标签 javascript vue.js ecmascript-6 vuejs2 vuex

我想知道是否可以仅将单个属性分派(dispatch)到 vuex 存储而不是整个对象。 vuex docs中没有写任何可能性。目前我存储这样的对象:

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

有时我只想从数据库中获取单个值并将其推送到存储中。有办法做到这一点吗?

更新

我认为我的问题不清楚。

实际上,我需要在调度中访问memberData的子嵌套属性,以仅更改memberData的一个元素。老实说,什么 react 并不重要。也可能是“foo”。

最佳答案

如果您查看 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的行动。

希望有帮助!

关于javascript - Vue 存储调度单个属性而不是整个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54658172/

相关文章:

javascript - 使用 vuejs3 CDN 在页面中声明外部组件的正确方法

javascript - 是否可以在解构之前检查对象是否可用?

javascript - dispatchEvent(new Proxy(event, {}) 不起作用

javascript - 在Html中动态添加文本框

javascript - 设置在另一个模块中实现的抽象的、实时可解析的 Vuex 存储?

javascript - 在 vuejs 中是否有重置组件初始数据的正确方法?

javascript - 将自定义值连接到按钮并将它们传递给函数

reactjs - 我可以忽略 eslint-loader 的意外保留字错误吗

javascript - jquery ui 小部件显示为文本输入

javascript - 我是否在 Angular Directive(指令)之外正确地共享了状态? (父范围/$rootScope 问题)