【发布时间】:2019-12-16 08:46:05
【问题描述】:
我正在使用 React 16 构建一个简单的电子商务应用程序。当我从购物车中删除商品时,显示的商品顺序会发生变化即使原始数组没有发生变化。并且新数组也是正确排序的。也没有冲突的键。它们在渲染过程中也不会改变。
这是购物车在从第一项中删除一个数量后:
如您所见,商品跳转到最后一个订单。
这里是removeFromCart 代码:
export const removeFromCart = item => prevState => {
let index = prevState.cart.indexOf(item.key)
console.log('cart before removal', prevState.cart)
let newCart = [
...prevState.cart.slice(0, index),
...prevState.cart.slice(index + 1)
]
console.log('cart after removal', newCart)
return {
cart: newCart
}
}
这是我的CartPage 组件:
function CartPage({ items, onAddOne, onRemoveOne }) {
return items.length > 0 ? (
<ul className="CartPage-items">
{items.map(item => (
<li key={item.key} className="CartPage-item">
<Item item={item}>
<div className="CartItem-controls">
<button
onClick={() => onRemoveOne(item)}
className="CartItem-removeOne"
>
–
</button>
<span className="CartItem-count">{item.count}</span>
<button
onClick={() => onAddOne(item)}
className="CartItem-addOne"
>
+
</button>
</div>
</Item>
</li>
))}
</ul>
) : (
<p>Your shopping cart is empty</p>
)
}
打开控制台查看数组顺序。请将一堆物品添加到购物车并尝试同时删除一个数量以查看问题是否重现。
【问题讨论】: