【发布时间】:2020-09-23 08:27:58
【问题描述】:
我需要一些帮助。我尝试了很多方法来解决我的问题,但我就是不能,没有任何效果。 我想在单击单个“水果”时更改水果和蔬菜数组中的 buyQuantity,我从操作中获得了 id..它可以工作,但是当我在下面尝试这个减速器时,当我点击水果项目时,我的状态完全改变了。我只有一个水果数组我说,像这样:
state= [
{id: 1, name:"apples", price: 2.50, avaibleProducts: 20, buyQuantity: 0},
{id: 2,name:"pears", price: 2.50, avaibleProducts: 20, buyQuantity: 0},
{id: 3,name:"bananas", price: 2.50, avaibleProducts: 20, buyQuantity: 0},
{id: 4,name:"oranges", price: 2.50, avaibleProducts: 20, buyQuantity: 0},
{id: 5,name:"plums", price: 2.50, avaibleProducts: 20, buyQuantity: 0},
],
我的代码是:
const initialState = {
loadingState: {},
productsCategories: [],
products: {
fruits: [
{id: 1, name:"apples", price: 2.50, avaibleProducts: 20, buyQuantity: 0},
{id: 2,name:"pears", price: 2.50, avaibleProducts: 20, buyQuantity: 0},
{id: 3,name:"bananas", price: 2.50, avaibleProducts: 20, buyQuantity: 0},
{id: 4,name:"oranges", price: 2.50, avaibleProducts: 20, buyQuantity: 0},
{id: 5,name:"plums", price: 2.50, avaibleProducts: 20, buyQuantity: 0},
],
vegetables: [
{id: 1,name:"potatos",price: 2.50, avaibleProducts: 20, buyQuantity: 0},
{id: 2,name:"tomatos",price: 2.50, avaibleProducts: 20, buyQuantity: 0},
{id: 3,name:"onions",price: 2.50, avaibleProducts: 20, buyQuantity: 0},
{id: 4,name:"carrots",price: 2.50, avaibleProducts: 20, buyQuantity: 0},
{id: 5,name:"pepper",price: 2.50, avaibleProducts: 20, buyQuantity: 0},
}
}
const productsCategoriesAndProducts = (state = initialState, action) => {
switch (action.type) {
case "ADD_PRODUCT":`enter code here`
return state.products.fruits.map(fruit => {
if (fruit.id === action.id) {
return { ...fruit, buyQuantity: fruit.quantity + 1 }
};
return fruit;
});
default:
return state;
}
}
export default productsCategoriesAndProducts;
请帮忙。 感谢您的帮助。
【问题讨论】:
-
我建议尝试使用immer,它大大简化了reducer代码:immerjs.github.io/immer/docs/introduction
-
好吧,理论上,你不应该改变你的状态。在 Redux 中,您需要保持不变性。其次,如果 id 匹配,则返回 ``` ...fruit 当您应该返回已更改为所需更新的整个状态时返回 true。如果可能的话,我建议跳过“产品”级别,直接进入水果/蔬菜。在您的情况下,您可以执行以下操作: ``` 在您的情况下: const fruits = [...state.products.fruits] // 映射水果并做您的更改 return { ...state, products: { 。 ..state.products, 水果 } } ```
标签: reactjs redux react-redux