网上的文章一般从两个角度回答这个问题:
第一,从源码角度,因为redux会对reducer返回的状态进行引用地址的比较,不同才更新,所以直接修改旧状态不会更新。
第二,从设计角度,如果要知道reducer返回的状态是否有变化,必须进行状态对象的深度比较,这样比较消耗性能,所以仅进行状态对象引用地址的比较,由开发者来决定是否更新,返回新状态才更新。
感觉网上的文章还是没有解释清楚redux为什么这么设计。如果reducer设计成可直接修改原状态的函数,那么也就没有必要进行新旧状态对象的比较了,因此根本不存在深度比较的问题。为什么redux不这么设计呢?