【问题标题】:In Nuxt, how to mutate a Vuex state in one module from the other?在 Nuxt 中,如何从另一个模块中改变一个模块中的 Vuex 状态?
【发布时间】:2021-11-07 00:39:29
【问题描述】:

我尝试了门户网站上提到的许多东西,但似乎没有任何东西对我有用,所以在这里发布一些解决方法。

我的Nuxtjs 应用程序文件夹store\modules 中有两个模块:ModuleAModuleB。对于ModuleB 中的一些验证,我想从ModuleA 访问state,但由于某种原因,它失败了。

我尝试了rootScopeimport 等,但对我不起作用。

我的state/modules/ModuleA.js

export const state = () => ({
  eventType: 'MyEvent',
})

export const mutations = {
  eventTypePopulator (state, event) {
    state.eventType = event
  },
}

我的state/modules/ModuleB.js

export const state = () => ({
  input: {}
})

export const mutations = {
  jsonPreparation ({state, rootState}, payload) {
    console.log(rootState.eventType)
    // console.log($store.state.ModuleA.eventType)
  }
}

我尝试将ModuleA 导入ModuleB 并使用它,但这对我也不起作用。有人可以帮助我如何在Nuxtjs/Vuejs 中从一个Module 中的另一个Module 访问state

【问题讨论】:

  • 这些模块是否有命名空间?
  • @kissu 非常感谢您的回复。创建这些模块时,我没有使用任何namespacing。我刚刚在store 下创建了一个文件夹modules,然后创建了不同的文件,例如ModuleA.jsModuleB.js。做命名空间有什么好处?它会解决我的问题吗?
  • 顺便说一句,你的意思是store/modules/ModuleA.js
  • 如果您主要想更有条理,命名空间是不错的选择。可以在此处找到更多信息:vuex.vuejs.org/guide/modules.html#namespacing 这本身并不能解决问题,但您需要考虑到这一点。 Nuxt 默认对其模块使用命名空间,如下所示:nuxtjs.org/docs/2.x/directory-structure/store#modules 我通常会创建自己的命名空间,所以我不确定,但我的答案可能与您正在寻找的内容有些接近。

标签: vue.js nuxt.js vuex store vuex-modules


【解决方案1】:

API reference 所示,rootStateactionsgetters 中可用。
它没有找到任何将它直接用于mutation的方法。

同时,这可以通过像这样将其作为参数传递给mutation 来实现

ModuleB.js

const mutations = {
  NICE_TASTY_MUTATION: (_state, { rootState, payload }) => {
    // _state is not used here because it's moduleB's local state
    rootState['moduleA'].eventType = payload
  },
}

const actions = {
  async myCoolAction({ commit, rootState }, { ...}) {
    commit('NICE_TASTY_MUTATION', {
      rootState,
      payload: 'some-stuff'
    })
  }
}

这可以在 .vue 文件中调用,类似这样

methods: {
  ...mapActions('ModuleB', ['myCoolAction']),
}

...
await this.myCoolAction()

PS:IMO 的惯例是更多地将文件命名为module_b.js

【讨论】:

猜你喜欢
  • 2017-07-25
  • 1970-01-01
  • 2018-05-02
  • 2017-05-12
  • 1970-01-01
  • 2020-10-26
  • 1970-01-01
  • 2011-04-01
相关资源
最近更新 更多