为什么我们在Redux中需要纯粹的reducer功能

时间:2017-05-10 07:27:39

标签: javascript redux

我是redux和研究这个框架的新手。正如document中所建议的,它需要返回新的状态对象,而不是改变以前的状态。我只是不明白这个目的。 JS参数是按值调用的,因此更改参数不会更新原始值。那么这样做有什么意义呢?

2 个答案:

答案 0 :(得分:1)

  

JS参数是按值调用的,因此更改参数不会更新原始值。

确实,但是如果传递的值是对象引用(就像对象一样),并且您使用该对象引用来更改对象的状态,那么它不是一个纯粹的功能。

例如:



function notPure(obj) {
    // Modify object state
    ++obj.counter;
}

var o = {counter: 0};
notPure(o);
console.log(o.counter);




相反,我们希望通过修改返回一个新对象:



function pure(obj) {
    return {counter: obj.counter + 1};
}

var o = {counter: 0};
var o2 = pure(o);
console.log(o.counter);
console.log(o2.counter);




答案 1 :(得分:1)

好问题。首先,您对JavaScript pass by value的理解并不准确。你可以参考this question关于这个问题的基本理论究竟是什么。

所以情况是传入的项目是按值传递的。但是通过值传递的项本身就是一个引用。从技术上讲,这称为call-by-sharing

这解释了,另一个问题是我们为什么要保持以前的状态呢?

答案很简单:因为我们希望状态可追踪且更易于管理。 Redux正是帮助我们管理它的工具。

想象一下,如果你改变状态本身,就会有一些状态的堆栈,而不是制作副本并将其推送到堆栈的顶部。你会发现很难回到以前的状态。它变得不易管理,容易受到大型应用程序的攻击。<​​/ p>

在Redux中,每次我们发送一个动作时,我们都会以不可变的方式处理。这样,所有的州都完全可以控制,因此我们可以遍历历史。这是Redux IMO的禅宗。

希望有所帮助!