为什么Redux操作是作为函数实现的?

时间:2018-04-29 09:41:36

标签: javascript redux

我正在研究Redux如何工作,而且有些东西我无法完全理解。

通常Redux操作是作为函数实现的。例如:

const ACTION_INCREMENT = 'INCREMENT'
const increment = function(amount) {
   return {type: ACTION_INCREMENT, amount: amount}
}

store.dispatch(increment(2));

为什么不将动作作为类实现?我的意思是,我发现更自然的东西:

class ActionIncrement {
    constructor(amount) {
      this.amount = amount;
    }
}

store.dispatch(new ActionIncrement(2));

没有人这样做很奇怪。这种方法有问题我还没见过吗?

2 个答案:

答案 0 :(得分:1)

您所指的是动作创建者,它们是返回动作的函数(JS对象)。

以下是我现在能想到的一些缺点:

  • 类在语法上更复杂,导致更长的样板代码,更多的误用/错误空间(例如,忘记为减速器分配type属性以识别)。

  • 行动创作者应该是无国籍人。使用类可能会导致更多误用/误解。当然,您也可以在函数上使用this,但这种情况不太常见(对于使用ES6箭头语法声明的函数不可能)。

  • 它将与许多现有的Redux库不兼容,例如redux-thunkredux-thunk延迟将操作分派给reducers,允许在动作创建器中进行异步调用。对于这样的库来支持类,所有类必须同意具有将被调用和等待的公共异步方法。这导致更多的样板和误用/错误的空间。

答案 1 :(得分:1)

我建议您在文档中阅读the Motivation section

  

遵循Flux,CQRS和Event Sourcing,Redux的步骤   试图通过强加某些来预测状态突变   更新如何以及何时发生的限制。这些限制   反映在Redux的三个原则中。

您可以创建类,因为它们只是用于创建对象的语法糖,但是,对于更明确的Object文字,这样做有什么好处?

动作是一个简单的配置对象,没有副作用,它提供了很多好处,如时间旅行和更可预测的调试,这是使用redux的主要优点之一。拥有类IMO除了引入额外的代码之外,还可以指出人们创建一些状态变异的功能。