下面是react reducer的代码。当我更新数据时,状态变为“未定义”。
const intialState = { data: JSON.parse(localStorage.getItem('formData')) || [] };
const formReducer = (state = intialState, action) => {
switch (action.type) {
case 'ADD_DATA':
return { ...state, data: [...state.data, action.payload] };
case 'UPDATE_DATA':
{
console.log('form update data dispatch', action.payload);
const { id, data } = action.payload;
const newData = state.data;
newData.map((item, index) => {
if (item[0].uid == id) {
alert(item[0].uid === id);
newData[index] = data;
return (state.data = newData);
}
});
}
break;
default:
return state;
}
};
export default formReducer;
字符串
我正在使用useSelector()
来获取更新的数据。
2条答案
按热度按时间wwwo4jvm1#
在
UPDATE_DATA
的情况下,您不会返回更新的状态。这导致状态变为undefined
。map
回调中的return
语句返回数组中的项,而不是状态。你可以这样重写这个案例:
字符串
3pvhb19x2#
在
UPDATE_DATA
reducer案例中有几个问题:1.next 状态值不会从case返回,因此在处理此操作时,状态将是未定义的。
Array.prototype.map
返回一个数组,它的回调应该是一个纯函数,它不应该用来改变外部引用或它正在迭代的数组。newData
是对当前state.data
的引用,因此reducer的情况也会改变当前状态,而不是返回 * 新的 * 状态/数组引用。更正确的实现应该如下所示:
字符串
或者更简洁一点:
型