reactjs - 如何使用下划线在 redux 中返回新状态?
问题描述
当我处理带下划线的减速器时,不允许使用 Object.assign 因为必须支持浏览器。我这样写reducer:
const actionHandlers = {
[actionTypes.SELECT_OPTION](state, payload) {
_.each(state.options, option => option.selected = option.value === payload.value);
return state;
}
};
然后我意识到应该返回一个新状态,不应该使用每个,因为每个都有副作用会改变原来的。
然后我用地图替换每个:
const actionHandlers = {
[actionTypes.SELECT_OPTION](state, payload) {
return [
...state,
{ options: _.map(state.options, option => option.selected = payload.value === option.value)}
];
}
};
似乎我分配了新创建的对象并返回新状态而不改变原始状态,但是当我记录它们时,原始状态也发生了变化。
任何提示将不胜感激!
解决方案
state
看起来它应该是一个带有options
数组的对象?
这是一个非变异版本:
const actionHandlers = {
[actionTypes.SELECT_OPTION](state, payload) {
return {
...state,
options: state.options.map(option => ({ ...option, selected = payload.value === option.value })
};
}
};
为了不发生变异,我们也需要传播(复制)每个option
。否则,它将引用现有的option
.
推荐阅读
- leaflet - 更改leafletjs中的默认图层
- firebase - 自动从firestore触发器创建集合索引
- swift - 如何使用viewController编写代码以在swift 5中显示字母及其数字分数
- sql-server - 适当避免 SQL 注入
- android - 我应该如何从服务器获取数据以进行 recyclerview
- python - 如何跳过中间节点?
- javascript - 无法读取welcomeChannel.send 中未定义的属性“发送”
- css - 图像 Flexbox 样式在 Github Markdown 中不起作用
- c++ - 在 C++ 中的链表中间插入节点时出现段错误
- python - Matplotlib:TexLive 安装不起作用