React-Redux中合并state的写法是否符合React正确实践?
你的Redux合并状态实现符合最佳实践吗?
首先要给你点个赞——你的实现完全符合Redux和React的核心最佳实践!
为什么你的写法是正确的?
Redux要求reducer必须是纯函数:不能修改原有的state对象/数组,必须返回一个全新的状态副本。你的代码完美做到了这两点:
- 使用
{...state}展开原state,创建了一个新的state对象,避免直接修改原state - 用
state.politicianList.concat(action.payload)生成新的数组——concat方法不会修改原数组,而是返回一个包含原数组元素和新payload元素的新数组
这种保持**不可变性(Immutability)**的做法是关键:它能让Redux准确检测到状态变化,进而触发相关组件的重新渲染,同时也让状态追踪、调试变得更简单。
补充几个等价的写法(可选)
如果你喜欢更简洁的语法,也可以用ES6的数组展开运算符来替代concat,效果完全一致:
return {...state, politicianList: [...state.politicianList, ...action.payload]};
两种写法都是合规的,选你觉得更易读的就行。
要避免的错误写法
这里提醒一下,绝对不要用push来修改原数组,比如:
// ❌ 错误:直接修改了原state的politicianList,违反纯函数原则 state.politicianList.push(...action.payload); return state;
这种写法会导致Redux无法检测到状态变化,组件也不会正确更新。
总的来说,你的代码是完全正确的,继续保持就好!
内容的提问来源于stack exchange,提问作者EdG
相关产品推荐
相关产品推荐

