首页 文章

我的vuex变异如何发布新动作?

提问于
浏览
0

我的vuex变异如何发送新动作或我的动作如何获得对商店的读取权限?

基本上我有一个调用突变的动作:

updateSelectedItems: (context, payload) => {
  context.commit('updateSelectedItems', payload);
},

以及更新列表的突变 . 它还可以获得任何新物品 . 我需要对这些新项目做些什么:

updateSelectedItems: (state, payload) => {
  var newItems = _.differenceWith(payload, state.selectedItems, function (a, b) {
    return a.name === b.name;
  });
  state.selectedItems = _.cloneDeep(payload);

  _.each(newItems, (item) => {
    // How do I do this??
    context.dispatch('getItemDetail', item.name)
  });
},

1 回答

  • 1

    让你的突变做得太多真的不是最好的做法 . 如果它们超级简单并且通常只做一件事,那就最好了 . 让您的行为处理可能影响州的任何多步骤流程 .

    你的例子会更有意义地结构化:

    actions: {
      updateSelectedItems(context, payload) {
        var selectedItems = context.state.selectedItems;
        var newItems = _.differenceWith(payload, selectedItems, (a, b) => {
          return a.name === b.name;
        });
    
        context.commit('setSelectedItems', payload);
    
        _.each(newItems, (item) => {
          context.dispatch('getItemDetail', item.name)
        });
      },
      getItemDetail(context, payload) {
        // ...
      }
    },
    mutations: {
      setSelectedItems(state, payload) {
        state.selectedItems = _.cloneDeep(payload);
      }
    }
    

    如果你真的需要从变异内部发送一些东西(我强烈建议不要这样做),你可以将调度函数作为有效载荷的一部分传递给变异 .

相关问题