reactjs - Redux 改变了一个类型为 object 的 reducer
问题描述
所以我有以下减速器
const objectType = (state = {type: 0, image:defaultImage, moreOptions: {tap: 0, griff: 0} },
action) => {....
case 'CHANG_OPTIONS':
return state = {...state, moreOptions: {tap:action.tap, griff: action.griff}}
这是动作,所以我得到一个动态类别并分配产品的 id。
export const changeOptions = (category, id) => {
return {
type: 'CHANG_OPTIONS',
[category]: id,
}
}
调度的一个例子是
dispatch(changeOptions('tap', 0))
现在,每当我单击水龙头或 griff 时,我的对象都会从列表中删除另一个类别。
这是 Redux Debugger 工具的屏幕截图
我确定问题出在我的减速器上:
moreOptions: {tap:action.tap, griff: action.griff}
有没有一种方法可以传播对象并仅更新已更改的对象?
解决方案
这是因为无论它们的输入值如何,您都覆盖了两者tap
和griff
值。下面试试。
const newOptions = {};
if (action.tap) {
newOptions.tap = action.tap;
}
if (action.griff) {
newOptions.griff = action.griff;
}
return (state = {
...state,
moreOptions: {
...state.moreOptions,
...newOptions
}
});
推荐阅读
- video - ffmpeg avcodec_receive_packet 返回 -11
- mongodb - Meteor 预填充集合
- spring-mvc - Spring Boot 过滤器 URL 映射
- c# - WPF-DataGrid:如何在不丢失本地化日期格式的情况下建立按日期排序?
- javascript - 如何让 Google Tag Manager 中的双花括号更漂亮地识别为 JavaScript?
- java - Spring数据JPA保存更新父实体
- regex - 怎么说除了破折号(“-”)之外的任何字符
- php - 如果注册页面重新加载,请记住 HTML 下拉列表值
- windows - PDF打印脚本
- css - 无法解决 woocommerce 购物车页面标题中的红色下划线