You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何更新状态时需使用...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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 00:35:27