Я пытаюсь передать массив объектов от родительского к дочернему компоненту в качестве опоры, а затем переместить его на карту и отобразить в дочернем компоненте. Когда я пытаюсь отобразить его, ничего не происходит, когда я его console.info, он показывает мой массив объектов. Какая разница, что тут ломается?
class ClothingBuyingOptions extends Component {
state = {
size: '',
color: '',
showShoppingBag: false,
items: []
}
addItemToBag = () => {
const { size, color } = this.state;
this.setState({
showShoppingBag: true,
items: [ ...this.state.items, [{ size: size, color: color }]]
});
}
render() {
return (
<div>
<button
onClick = {this.addItemToBag}>
Add to Bag
</button>
<ShoppingBag items = {this.state.items} />
</div>
);
}
}
class ShoppingBag extends Component {
render() {
const items = this.props.items.map((item, index) =>
<div
key = {index}>
<p>{item.size}</p>
<p>{item.color}</p>
</div>
)
console.info(this.props.items)
return (
<div className = "container">
{items}
</div>
);
}
}
У меня есть кнопка, которая вызывает его onClick. <button onClick = {this.addItemToBag}>Add to Bag</button>
items пустой. состояние будет объединено, нет необходимости вызывать состояние с ... this.state.item. Вам нужно setState с элементом, который вы хотите иметь в состоянии. А где кнопка? :)
Извините, вырежьте много, чтобы было лаконичнее. Добавил кнопку назад. Не уверен, что вы имеете в виду, если я не вызываю это с помощью оператора распространения, как мне продолжать добавлять в массив?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это потому, что вы сохраняете массив внутри массива, а затем пытаетесь получить доступ к своим свойствам объекта в массиве.
Измените эту строку:
items: [ ...this.state.items, [{ size: size, color: color }]]
К этому:
items: [ ...this.state.items, { size: size, color: color }]
То, как ваше состояние создается с помощью вашего кода, выглядит следующим образом:
items: [
[ { size: '', color: ''} ],
[ { size: '', color: ''} ]
]
И вы хотите, чтобы это было так:
items: [
{ size: '', color: ''},
{ size: '', color: ''}
]
Кроме того, поскольку ключи и значения ваших объектов совпадают, вы можете определить свой объект как {size, color}, что совпадает с {size: size, color: color}.
Спасибо, это было очень полезно.
itemsначинается как пустой массив. Когда и как называетсяaddItemToBag()?