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);
}
}
}
通过此更改,您所在州的每个已修改的订单对象都是一个新对象。
添加回答
举报