javascript - 在不同的 Vuex 模块中提交变更

标签 javascript vue.js vue-component vuex vuex-modules

我得到了以下结构:

store.js
|
|-- yields.js
|
|--analysis (sub-folder)
          |
          |
          ---actions.js
          |
          ---mutations.js
          |
          ---state.js

在mutations.js中,我在state.js中设置状态的日期,如下所示:

stateFetchParamsStart: (state, input) => {
  state.fetchParams.start = input;
  // Want to change yields.PRdate too
  //state.yields.PRdate = input;
}

如何通过 state.js 的突变访问 Yields.js 的 PRdate 状态?


编辑更多信息:

当组件安装时,我设置 PRdate 的初始值,如下所示:

mounted(){
  ...
  this.fetchPRData(this.pvSystem.system_id); // makes an axios call
}

我还设置了一个计算属性来询问日期:

getPrDate: {
  get(){
    return this.$store.state.yields.PRdate;
  }
}

现在,当单击日期选择器时,我希望更改日期(也在 v-model 上计算属性):

start: {
  get() {
    return this.$store.state.analysis.fetchParams.start
  },
  set(value) {
    this.$store.commit('stateFetchParamsStart', value)
  }
}

最佳答案

您可以从另一个模块更改 Vuex 模块的状态,但必须通过 action 来完成。该操作可以调用另一个模块中的突变。首先,在您的 yields 模块中创建一个突变:

mutations: {
  statePRdate(state, input) {
    state.PRdate = input;
  }
}

现在您可以使用分析模块中的操作来提交该突变。将第三个参数传递给 commit 调用:

{ root: true }

如果您的模块是命名空间的,第一个参数将是 mutationNamemoduleName/mutationName。下面是一个新操作,它既调用自己模块中的突变,又调用另一个模块中的突变:

actions: {
  analysisAction({ commit }, input) {
    commit('stateFetchParamsStart', input);         // Commit in this module
    commit('statePRdate', input, { root: true });   // Commit in another module
  }
}

启动如下操作:

this.$store.dispatch('analysisAction', 'input')

命名空间模块

如果您的模块是命名空间的,那么您将在提交和操作中使用命名空间语法:

commit('yields/statePRdate', input, { root: true })
this.$store.dispatch('analysis/analysisAction', 'input')

关于javascript - 在不同的 Vuex 模块中提交变更,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65918720/

相关文章:

javascript - Vuex 和事件总线有什么区别?

javascript - 在 Angular 2 中渲染模板后运行 jQuery 代码

javascript - 将对象数组显示为嵌套列表

javascript - Vue.js - 具有内联样式绑定(bind)的动态进度条

vue.js - Vue - 从字符串中渲染一个元素

javascript - 一个 vue 实例中具有多个数据的类似组件

javascript - 外部 JavaScript 文件运行两次

javascript - 零次或多次匹配对于零次匹配无法正常工作

javascript - 按下按钮时的水平和垂直不可见滚动

javascript - 如何将 beforeOpen 和 beforeClose 监听器传递给 vue-js-modal 对话框?