在我的化简器“ reducer_product_list”中,我有这个数组:
let initialState = [
{name: 'Article 1', price: 5, quantity: 10},
{name: 'Article 2', price: 15, quantity: 8},
{name: 'Article 3', price: 7, quantity: 15},
{name: 'Article 4', price: 9, quantity: 5},
{name: 'Article 5', price: 11, quantity: 100},
{name: 'Article 6', price: 23, quantity: 20},
]
当我得到动作“ ADD_TO_CART”时,我想减少所选对象的数量。有效负载就是这些对象之一。
我输入了上面的代码:
export default (state = initialState, action) => {
switch (action.type) {
case 'ADD_TO_CART':
initialState.map((product, i) => {
if (product.name === action.payload.name) {
initialState[i].quantity -= 1
return state;
}
});
default: return state
}
}
如果我用console.log记录了initialState,数量将减少,但是在呈现视图的容器中,数量保持不变。
谢谢您的帮助。
答案 0 :(得分:1)
尝试一下:
export default (state = initialState, action) => {
switch (action.type) {
case 'ADD_TO_CART':
return state.map(product => {
if (product.name === action.payload.name) {
return {...product, quantity: product.quantity-1}
};
return product;
});
default: return state
}
}
原因是您必须根据请求的操作返回从当前状态派生的 new 状态对象,以反映所需的更改。有关更多详细信息,请参见Redux Reducers。
答案 1 :(得分:0)
感谢您的帮助,它效果很好! 我只需要更改一件事:我映射到了状态,而不是映射到initialState上。
export default (state = initialState, action) => {
switch (action.type) {
case 'ADD_TO_CART':
return state.map(product => {
if (product.name === action.payload.name) {
return {...product, quantity: product.quantity - 1}
};
console.log(state)
return product;
});
default: return state
}
}