为何更新状态时需使用...state(前序状态)?附authReducer代码
为什么更新状态时需要使用
...state? 在Redux这类状态管理模式里,这么写核心原因有两个:
遵守状态不可变性规则
Redux要求状态是只读的,绝对不能直接修改原状态对象。如果直接写state.loading = true再返回原state,Redux通过浅比较会判定状态没变化,关联的组件不会重新渲染,你的状态更新就等于白做。用...state会创建一个全新的对象,既保证原状态不受影响,又能让Redux准确检测到状态更新。保留未修改的状态属性
你的状态对象包含authData、loading、error三个属性,处理AUTH_START这类action时,你只需要更新loading和error,但authData的值得原样保留。...state会把原状态里所有属性都复制到新对象中,你只需要覆盖要修改的属性就行。要是不写...state,直接返回{ loading: true, error: false },新状态就会丢失authData,后续组件用到这个属性时肯定出问题。
拿你代码里的例子来说:
case "AUTH_START": return { ...state, loading: true, error: false };
这里...state复制了原状态的authData,然后覆盖loading和error的值,最终返回的新状态包含所有原有属性,只更新了需要改变的部分。
再看AUTH_SUCCESS分支,你需要更新authData、loading和error,...state帮你省去了手动写authData: state.authData的麻烦,而且如果后续给状态加新属性,这个写法不用改动就能自动保留新属性,扩展性更强。
内容的提问来源于stack exchange,提问作者SUSNATA DAS
相关产品推荐
相关产品推荐

