我正在研究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));
没有人这样做很奇怪。这种方法有问题我还没见过吗?
答案 0 :(得分:1)
您所指的是动作创建者,它们是返回动作的函数(JS对象)。
以下是我现在能想到的一些缺点:
类在语法上更复杂,导致更长的样板代码,更多的误用/错误空间(例如,忘记为减速器分配type
属性以识别)。
行动创作者应该是无国籍人。使用类可能会导致更多误用/误解。当然,您也可以在函数上使用this
,但这种情况不太常见(对于使用ES6箭头语法声明的函数不可能)。
它将与许多现有的Redux库不兼容,例如redux-thunk。 redux-thunk
延迟将操作分派给reducers,允许在动作创建器中进行异步调用。对于这样的库来支持类,所有类必须同意具有将被调用和等待的公共异步方法。这导致更多的样板和误用/错误的空间。
答案 1 :(得分:1)
我建议您在文档中阅读the Motivation section。
遵循Flux,CQRS和Event Sourcing,Redux的步骤 试图通过强加某些来预测状态突变 更新如何以及何时发生的限制。这些限制 反映在Redux的三个原则中。
您可以创建类,因为它们只是用于创建对象的语法糖,但是,对于更明确的Object文字,这样做有什么好处?
动作是一个简单的配置对象,没有副作用,它提供了很多好处,如时间旅行和更可预测的调试,这是使用redux的主要优点之一。拥有类IMO除了引入额外的代码之外,还可以指出人们创建一些状态变异的功能。