我最近开始将东西从 jQ 迁移到更结构化的框架 VueJS,我喜欢它!
从概念上讲,Vuex 对我来说是一种范式转变,但我相信我现在知道它的全部内容,并且完全理解它!但是存在一些小的灰色区域,主要是从实施的角度来看。
这个我觉得设计的不错,但是不知道是不是和Vuex单向数据流的 循环 相矛盾。
基本上,从一个动作中返回一个 promise(-like) 对象被认为是一种好的做法吗?我将它们视为异步包装器,具有失败状态等,因此似乎很适合返回承诺。相反,mutators 只是改变事物,并且是存储/模块中的纯结构。
原文由 Daniel Park 发布,翻译遵循 CC BY-SA 4.0 许可协议
actions
在 Vuex 中是异步的。让调用函数(动作的发起者)知道动作已完成的唯一方法是返回一个 Promise 并稍后解决它。这是一个示例:
myAction
返回一个Promise
,进行 http 调用并解析或拒绝Promise
稍后 - 全部异步现在,当你的 Vue 组件启动
myAction
时,它会得到这个 Promise 对象,并且可以知道它是否成功。以下是 Vue 组件的一些示例代码:正如您在上面看到的,对于
actions
返回一个Promise
非常有益。否则,动作发起者无法知道正在发生的事情以及事情何时足够稳定以在用户界面上显示某些内容。最后一点关于
mutators
正如你正确指出的那样,它们是同步的。他们更改了state
中的内容,并且通常从actions
调用。无需将Promises
与mutators
混合,因为actions
处理该部分。编辑:我对单向数据流的 Vuex 循环的看法:
如果您在组件中访问
this.$store.state["your data key"]
之类的数据,则数据流是单向的。行动的承诺只是让组件知道行动已经完成。
组件可以从上面示例中的 promise resolve 函数中获取数据(不是单向的,因此不推荐),或者直接从
$store.state["your data key"]
中获取数据,这是单向的并且遵循 vuex 数据生命周期。上述段落假设您的 mutator 使用
Vue.set(state, "your data key", http_data)
,一旦在您的操作中完成了 http 调用。