Vuejs2 我的vuex变种如何发送新操作?

Vuejs2 我的vuex变种如何发送新操作?,vuejs2,vuex,Vuejs2,Vuex,我的vuex操作如何分派新操作,或者我的操作如何获得对存储的读取权限 基本上我有一个动作叫突变: updateSelectedItems: (context, payload) => { context.commit('updateSelectedItems', payload); }, 以及更新列表的变异。它还可以获得任何新项目。我需要处理这些新项目: updateSelectedItems: (state, payload) => { var newItems = _.

我的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)
  });
},

让你的基因突变做得太多并不是最好的做法。最好是他们超级简单,通常只做一件事。让您的操作处理可能影响状态的任何多步骤过程

您的示例将更有意义,结构如下:

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);
  }
}


如果您确实需要从突变内部分派某些内容(我强烈建议不要这样做),您可以将分派函数作为有效负载的一部分传递给突变。

让突变执行太多操作并不是最佳做法。最好是他们超级简单,通常只做一件事。让您的操作处理可能影响状态的任何多步骤过程

您的示例将更有意义,结构如下:

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);
  }
}


如果您确实需要从变异内部分派某些内容(我强烈建议不要这样做),您可以将分派功能作为有效负载的一部分传递给变异。

从技术上讲,使用
调用
分派
提交
(或其他一些)。。。我只是为那些来到这里并需要它来满足其特定用例的人提一下这一点

在我的情况下,我使用的是Firey vuex库,它实际上传递一个函数作为将返回更新数据的有效负载,我使用该函数以及数据库中的
刷新时间
键来确定何时刷新某些用户数据

SOME_MUTATION( state, getData() ){
    const new_data = getData()
    if( new_data.refresh_time > state.user.refresh_time ){
        this.dispatch( 'refreshFromOtherStateMeta', state.user.id )
    }
    state.user = new_data
}

从技术上讲,使用
this
调用
dispatch
commit
(或其他一些)。。。我只是为那些来到这里并需要它来满足其特定用例的人提一下这一点

在我的情况下,我使用的是Firey vuex库,它实际上传递一个函数作为将返回更新数据的有效负载,我使用该函数以及数据库中的
刷新时间
键来确定何时刷新某些用户数据

SOME_MUTATION( state, getData() ){
    const new_data = getData()
    if( new_data.refresh_time > state.user.refresh_time ){
        this.dispatch( 'refreshFromOtherStateMeta', state.user.id )
    }
    state.user = new_data
}

这太棒了。我不知道该操作已读取状态访问权限。谢谢。@BeggaBegga:我拒绝了你的编辑(context->{commit,state}),因为不与作者讨论就更改答案代码是违反政策的。请对答案进行评论,并询问作者是否可以按照您的建议进行更改。这很好。我不知道该操作已读取状态访问权限。谢谢。@BeggaBegga:我拒绝了你的编辑(context->{commit,state}),因为不与作者讨论就更改答案代码是违反政策的。请对答案进行评论,并询问作者是否可以按照您的建议进行更改。