【问题标题】:Why getters and mutations accept state and actions accept context as first argument VUEX?为什么 getter 和 mutation 接受 state 而 action 接受 context 作为 VUEX 的第一个参数?
【发布时间】:2018-07-26 07:11:48
【问题描述】:

为什么 getter 和 mutation 接受状态,而动作接受上下文作为第一个参数,有什么区别,记住上下文包含状态的所有属性?

【问题讨论】:

  • 因为它是这样设计的?我想开发人员认为 getter 和 mutators 不需要访问其他任何东西。我不确定你期望什么样的答案
  • 我是出于好奇,因为我想更好地理解,因此我很乐意阅读更多关于开发 Vuex 的开发人员做出决定的原因。我想知道背后的“为什么”,这就是我问的原因

标签: vue.js vuejs2 vuex


【解决方案1】:

正如@Phil 所说 - 这只是设计使然。而这个设计有一个合乎逻辑的解释:

Actions 是尽可能多地为突变准备数据的地方(数据可以是输入数据或只是当前状态),这意味着发出 http 请求,根据 getter/state 转换数据等(同样,actions 总是返回 Promise )

突变只是改变状态的原子操作(它可以只是一行 - 属性分配,没关系!)。

getter 只是根据某些状态属性获取价值的帮手。

如您所见,每个部分都负责 Vuex 商店中的“特定工作”。 Getter 不应该改变状态(当然也不应该调用动作)只是读取并返回一些值,因此 getter 可以只访问状态和其他 getter。突变应该改变状态,因此突变当然只能访问状态和一些输入数据。操作需要整个存储上下文(状态、getter、突变、其他操作)以允许开发人员对数据执行任何操作并进行最终突变。

如果每个部分都可以访问上下文 - 那么你的代码就会变得混乱。

如果您遇到需要在变异中使用 getter 的问题 - 只需定义新操作即可。 如果您想更改 getter 中的状态 - 定义的新操作。

另外请记住,您不应该直接更改状态属性 - 始终为此使用突变。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多