VueX 等待突变执行

Ale*_*x T 3 vue.js vuex vuejs2 vuex-modules

VueX 中是否可以让一个方法等待,mounted()直到执行其他组件中的某些突变?

因为有时该突变是在之前执行的,有时是在之后执行的,因此我想知道在安装组件时是否可以在运行后等待:

  mounted() {
    // await MutationName
    this.columnItemsInit();
  }
Run Code Online (Sandbox Code Playgroud)

小智 5

您可以使用store.subscribe方法订阅突变

mounted() {
  let unsubscribe = null
  unsubscribe = this.$store.subscribe(({ type }) => {
    if (type === 'MutationName') {
      this.columnItemsInit()
      unsubscribe() // So it only reacts once.
    }
  })
}
Run Code Online (Sandbox Code Playgroud)

  • 这是一个有趣的选项,但这里的问题是有时会在安装组件之前执行突变。在这种情况下,它基本上永远不会初始化。一种可能是在商店里设置一个标志以进行监视和检查。也许状态值本身可以通过将其映射到计算值来观察?也许父组件应该调解并传递一个 prop,指示子组件是否应该在同级组件发出某种事件后初始化。尽管在我看来,重新思考这件事最初的设置方式是最好的选择。 (2认同)