特定のオブジェクトを更新するためにsetStateを使用していますが、何らかの理由でsetState関数に追加していないにもかかわらず、プロンプトを表示せずに状態内のオブジェクトが変化しています
基本的には、カート状態オブジェクトにアイテムがすでに存在する場合は、そのアイテムの数を1だけ増分します。そうでない場合は、カートの状態をそのアイテムを含むコピーで更新します。
this.state = {
items: {
0: { name: 'Red shirt', price: 10 },
1: { name: 'Blue shirt', price: 11 },
2: { name: 'Green shirt', price: 12 },
3: { name: 'Yellow shirt', price: 13 }
},
cart: {},
user: {}
}
addToCart = (key, item) => {
let newCart;
newCart = this.state.cart;
// item already exists in cart
if (newCart[key]) {
// increment qty of added item
newCart[key].qty++;
// does not exist, need to add to cart
} else {
newCart[key] = item;
newCart[key].qty = 1;
}
this.setState({ cart: newCart });
}
render() {
const { cart, items } = this.state;
return (
<div className="App">
<h1>Streat</h1>
<Checkout cart={cart} />
<Items
items={items}
addToCart={this.addToCart}
/>
</div>
);
}
}
// Items component which holds Item component
class Items extends Component {
constructor(props) {
super(props)
}
render() {
const { items, addToCart } = this.props;
return (
<div>
{
map(items, function renderItems(item, key) {
return <Item
item={item}
itemRef={key}
key={key}
addToCart={addToCart} />
})
}
</div>
)
}
}
// Item functional component which has the add to cart button
const Item = (props) => {
const { item, itemRef, addToCart } = props;
return (
<div>
<p>{item.name}</p>
<p>{item.price}</p>
<p>{item.qty || ""}</p>
<button onClick={() => addToCart(itemRef, item)}>Add</button>
</div>
)
}
私の項目の状態を検査することで、開発者ツールを反応させるオブジェクトのとき、私は数量を更新/私はカートにアイテムを追加するためのボタンをクリックするたびに、それは正しくカートにアイテムを追加しないことを確認私の状態でitemsオブジェクトのアイテムを更新し、 'qty'キー/値のペアを追加します。これは私が望むものではありません。
私のカートのオブジェクトにsetStateを使用していますが、アイテムオブジェクトも何らかの理由で変更されています。
あなたは – Geeky
@Geekyが行わあなたに総コードを追加することができます:)! – jonathanpuc