1 回答

TA貢獻1801條經驗 獲得超16個贊
你正在改變你的訂單,而不是把它們變成新的對象。即使您的 reducer 狀態正在生成新對象,如果您將組件綁定到 order 對象,它們也不會將這些視為更改。例如,如果您有:
const { connect } = require('react-redux');
export function Order({ orderId, order }) {
return (
<div className="order">
<span className="order-id">{order.id}</span>
<span className="order-status">{order.order_status}</span>
</div>
);
}
const mapStateToProps = ({ orders }, { orderId }) => ({
order: orders[orderId]
});
export default connect(mapStateToProps)(Order);
...然后order傳遞給您的組件的道具將被識別為同一個對象,并且您的組件不會更新。
嘗試按如下方式更改減速器:
const orders = (state = {}, action)=> {
switch(action.type){
case 'GET_ORDERS':
return action.payload
case 'PUT_ORDERS': {
const updates = action.payload.map((payloadOrder, index) => {
const oldOrder = state[payloadOrder.id];
const newOrder = oldOrder
? { ...oldOrder, order_status: payloadOrder.order_status }
: payloadOrder;
return {
[payloadOrder.id]: newOrder
};
});
return Object.assign({}, state, ...updates);
}
}
}
通過此更改,您所在州的每個已修改的訂單對象都是一個新對象。
添加回答
舉報