Redux:为什么国家职能被称为reducer?

来自官方文档的部分:

它被称为reducer,因为它是传递给Array.prototype.reduce(reducer,?initialValue)的函数的types。

对我来说没有什么意义。 有人可以向我解释为什么他们实际上被称为减速器? 事实上,他们返回一个默认值(或他们有一个默认的参数值)不会使他们减less恕我直言。

事实上,他们返回一个默认值(或他们有一个默认的参数值)不会使他们减less恕我直言。

减速器不只是返回默认值。 他们总是返回国家的积累(根据所有以前和当前的行动)。

因此,他们作为国家的还原者。 每次调用redux reducer时,都会通过action (state, action) 。 然后基于该动作减less (或累积)该状态,然后返回下一个状态。 这是经典foldreducefunction的一个循环。

作为@azium总结了state -> action -> state

如果您将应用程序中的一系列操作看作是一个列表,或者更像一个stream,则可能更有意义。

以这个人为的例子:

 ['apple', 'banana', 'cherry'].reduce((acc, item) => acc + item.length, 0) 

第一个参数是forms(Int, String) => Int的函数。 随着初始值,你通过reduce可以称为“减速function”,你会得到处理该系列项目的结果。 所以你可能会说,reducer函数描述了每个连续的单个项目做了什么来改变结果。 换句话说,reducer函数取先前的输出和下一个值,然后计算下一个输出。

这与Redux Reducer所做的相似:它采用之前的状态和当前的操作,并计算下一个状态。

在真正的函数式编程风格中,可以从概念上消除应用于参数和结果的含义,只关注input和输出的“形状”。

在实践中,Redux reducer通常是正交的,对于一个给定的动作,它们并不都对相同的属性进行修改,这样就很容易分割他们的职责,并用combineReducers聚合输出。

如前所述,这个名字与函数式编程中的reducer概念有关。 您也可能会发现减速器的Merriam-Webster字典定义有帮助:

1A。 合并或导致汇合:合并(将所有问题归结为一个)

Reducer将动作合并为一个表示应用程序状态的单个对象。

我们知道Reducer来自哪里(函数式编程),为什么他们可能被认为正在减less工作(将n个input项减less到一个单一的返回值 – 这正是正常函数所要做的)。 但是:名字只是一个名字,就像玫瑰是玫瑰的名字。 不要想太多。 Redux程序员是IT人员,他们被locking在他们的背景下,这是有道理的。 我们其他人不得不接受发明人的权利,把一只黄色的猫叫做蓝色的狗;-)

作者认为国家作为减税function的累积者。 例如:

 Final State = [Action1, Action2, ..., ActionN].reduce(reducer, Initial State); 

reduce函数来自函数式编程,名字“reducer”也来自FP。

我不喜欢在这里使用这个名字。 因为行动之后,我不认为世界是一个单一的价值结果。 这里的状态是一个对象。 例如:

 ['eat', 'sleep'] === [addTodo('eat'), addTodo('sleep')].reduce(reducer, []); 

这个减速器根本不会减less。 我不在乎它减less了什么。 将其命名为传感器将更有意义。

它被称为reducer的原因是因为你可以“减less” collection of actions和一个initial state (存储)来执行这些动作来得到final state

怎么样? 为了回答这个问题,让我再次定义一个reducer:

reduce()方法针对accumulator和数组的每个值(从左到右)应用一个function ,以将其减less为单个值。

减速机是做什么的?

reducer是一个纯function ,它接受当前状态和一个动作,并返回下一个状态。 请注意,状态是在集合上的每个操作被应用来改变这个状态时accumulated

因此,给定一collection of actions ,Reducer将应用于集合的每个值(从左到右)。 第一次,它返回initial value 。 现在reducer再次应用在这个初始状态,第一个动作返回下一个状态。 然后每次在current state next state应用下一个集合项(action),以获得next state直到到达数组的末尾。 然后,你会得到the final state 。 多么酷啊!