Redux中reducer 中为什么每次都要返回新的state!!!
最近在学习react相关的知识,学习redux的时候遇到看到一个面试题:
如果Redux没返回新的数据会怎样?
这就是要去纠结为什么编写reducer得时候为什么不允许直接修改state,而且要返回新的引用。
事实上我去百度得到的答案全是说:直接返回会导致state修改后页面不刷新,源码中对新旧state做了浅比较。。。
我感觉很奇怪,根据我的想法查看源码什么时候去调用reducer,也就是你想要更改state的时候会发起dispatch(action) 源码如下:
currentReducer在你创建store的时候就直接赋值了,而listeners是得到当前所有的订阅事件(通过subscribe(listener)方法订阅能引起当前组件刷新的方法),然后对listeners遍历调用。不管reducer执行后返回的state是新的引用还是原始引用,在这里其实所有的订阅事件都会被调用,相关组件也会更新。
总的来说我不敢确定是否自己理解有误(如果有请告诉我非常感谢~~)。
根据官方文档的描述感觉更多像是一种默认规则而不是因为UI不刷新所以state才必须返回新引用。
官方文档中的解释:cn.redux.js.org