【发布时间】:2020-01-16 15:58:28
【问题描述】:
我知道一旦该组件的状态发生更改,redux 会触发响应组件重新渲染,但在我的情况下不会发生这种情况。
动作
const addToCart = (product, cartProducts) => {
let newCartProducts = [...cartProducts, product];
newCartProducts = newCartProducts.reduce((acc, cur) => {
let repeated = acc.find(p => p.id === cur.id);
if(repeated) repeated.quantity++;
else acc.push(cur);
return acc;
}, []);
return {
type: ADD_TO_CART,
payload: newCartProducts
}
}
减速器:
export default (state = [], action) => {
switch (action.type) {
case ADD_TO_CART:
return action.payload;
default:
return state;
}
}
每次从组件派发action时reducer都会返回一个新的状态但是我需要关闭购物车再打开才能达到效果,redux不会同时更新产品数量??
【问题讨论】:
-
最好将不将现有产品添加到卡中的逻辑放在reducer中,例如
if(state.map(cardItem=>cardItem.id).includes(action.payload.newItem)),如果redux开发工具说在调度操作后添加了项目,那么你的问题可能在卡片物品的容器中。 -
是的,控制台一切正常?但是在我关闭并重新打开购物车之前,购物车产品数量不会更新......而且我认为该操作是放置我的逻辑并使减速器只返回数据的更好地方??
-
您可以使用 React 开发工具查看组件接收到的属性,我怀疑容器或减速器中有问题,您没有发布它会改变包含购物车项目的对象而不是复制对象。
标签: javascript reactjs redux