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

Redux Reducer中...state的作用疑问:更新todos前为何展开原state

Reducer中...state的实际作用

你现在的state里只有todos这一个属性,所以暂时不写...state的时候,useSelector能正常拿到todos数组,但这只是当前场景下的巧合,...state的真正作用是保留state中所有未被修改的属性,避免后续扩展功能时出问题。

具体来说:

  • 应对state的扩展需求:现在你的Todo应用只用到了todos,但如果以后要加新状态(比如筛选条件filter、正在编辑的todo IDcurrentEditId),不写...state的话,这些新增的属性会在你返回新状态时被直接丢弃。比如假设后续state变成:
const initialData = {
  todos: [],
  filter: 'all',
  currentEditId: null
};

当你处理ADD_TODO时,如果只返回{ todos: [...] },新状态里就没有filter和currentEditId了,依赖这些状态的功能(比如筛选显示、编辑框状态)会直接失效。

  • 遵循Redux不可变更新原则:Reducer要求必须返回新的状态对象,不能直接修改原state。...state是浅复制原state的所有属性,然后再覆盖需要更新的todos,这样既保证了状态的不可变性,又完整保留了原state中其他不需要修改的内容。

简单说,现在不写...state看似没问题,但这是不规范的写法,会给未来的功能扩展埋坑,按照Redux的最佳实践,必须先展开...state再修改目标属性。

内容的提问来源于stack exchange,提问作者Krishna Bharadwaj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 17:05:31