因为reducer秉持的理念是纯函数吧,固定的输入会有固定的输出。如果直接修改原状态,那么就不会有输出了,违背了纯函数的原则。
另外,原对象作为reducer的入参,修改原对象就相当于修改了参数,这是一种副作用,同样违背了纯函数的原则。
至于为什么设计成纯函数,目的就是不改变原有状态,最终的目标是实现redux时间旅行的特性,让action变得可追踪。正如chrome插件redux-dev-tools中的交互,可以点击任意时刻的action看到那时的state是什么样的。
一个action对应一个新的状态,可以方便地将action和state对应起来。假设直接改变原有状态,将使状态变得难以追踪。
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…