这是一个学习目的的问题,我卡在了一个特定的方法上。我正在玩 Redux 来学习它,我对我的一部分代码有疑问。假设我有我附加的组件作为屏幕截图,这非常简单。
这个item属性是4个键值对(uuid, quantity, price, name)的对象。我正在尝试以两种方式更新数量。一个成功,一个不成功。
在减速器中这个工作:
if (action.type === QUANTITY_UPDATED) {
return state.map((item) => {
console.log(item);
if (item.uuid === action.payload.uuid) {
return { ...item, quantity: action.payload.quantity };
}
return item;
});
};
但这并没有返回我提到的 .map 不是函数的错误。这可能是我犯的一个愚蠢的错误,但无法弄清楚。任何输入?
if (action.type === QUANTITY_UPDATED) {
const item = state.find((item) => item.uuid === action.payload.uuid);
return { ...item, quantity: action.payload.quantity };
}
此外,请确保在 Redux reducers 中,我无法更改属性。会不会是这个原因?
啊,现在我看到问题了。你总是应该从你的减速器返回相同类型的状态。
在这里,您从减速器返回一个数组:
if (action.type === QUANTITY_UPDATED) {
return state.map((item) => {
console.log(item);
if (item.uuid === action.payload.uuid) {
return { ...item, quantity: action.payload.quantity };
}
return item;
});
};
但是在这里,你要返回一个对象:
if (action.type === QUANTITY_UPDATED) {
const item = state.find((item) => item.uuid === action.payload.uuid);
return { ...item, quantity: action.payload.quantity };
}
对象不是数组。
下次你尝试更新状态时,你的 reducer 无论如何都会坏掉