Ich verwende SetState, um ein bestimmtes Objekt zu aktualisieren, aber aus irgendeinem Grund wird ein anderes Objekt ebenfalls mutiert, obwohl ich es nicht in der Funktion setState hinzugefügt habe.Objekt in Zustand ändert sich, ohne aufgefordert zu werden
Grundsätzlich habe ich eine "in den Warenkorb" -Funktion, wenn Artikel bereits im Warenkorb Statusobjekt existiert, wird nur die Menge um 1 inkrementiert. Wenn nicht, Status des Wagens mit einer Kopie aktualisieren, die das Element enthält.
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>
)
}
Wenn der Zustand meiner Artikel Prüfobjekt reagieren in Entwickler-Tools, wie ich sehe, dass jedes Mal, wenn ich auf die Schaltfläche klicken ein Element in den Warenkorb zu legen, ist es richtig, die Artikel in den Warenkorb gelegt fügt/aktualisieren, um die Menge der Artikel, aber es aktualisiert auch das Element in den Objekten in meinem Zustand, Hinzufügen eines 'Menge' Schlüssel/Wert-Paar, das ist nicht was ich will.
Ich benutze SetState auf meinem Warenkorb-Objekt, aber meine Objekte Objekt wird auch aus irgendeinem Grund geändert.
können Sie fügen Sie Code – Geeky
@Geeky insgesamt getan :)! – jonathanpuc