vuex中可以使用action改变store数据吗?

212 阅读1分钟

官方文档:

image.png 真的只能这样吗? 带着这个疑问我们看下这篇文章

结论:

可以的,但是必须保证一个原则:同一类型的action只有一个声明,但是不建议这样使用。

原因

  1. 核心点:dispatch在执行action的方法时,如果同一类型的action只有一个则是作为普通方法执行,多个则是使用Promise.all,这就是问题所在。

    dispatch (_type, _payload) {
        // ...
        const result = entry.length > 1
          ? Promise.all(entry.map(handler => handler(payload)))
          : entry[0](payload)
        // ...
    }
    

    多个action修改同一个state,根据Promise.all的特性,没办法保证state的结果。 至于使用Promise.all的原因,因为action设计初衷是可以随意使用异步操作,提高效率。

  2. 遵守单一职责的原则,一个方法干一件事。