Передача массива props дочернему компоненту

Я пытаюсь передать массив объектов от родительского к дочернему компоненту в качестве опоры, а затем переместить его на карту и отобразить в дочернем компоненте. Когда я пытаюсь отобразить его, ничего не происходит, когда я его 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>
    );
  }
}
items начинается как пустой массив. Когда и как называется addItemToBag()?
stealththeninja 09.12.2018 01:58

У меня есть кнопка, которая вызывает его onClick. <button onClick = {this.addItemToBag}>Add to Bag</button>

Joe Moran 09.12.2018 02:04

items пустой. состояние будет объединено, нет необходимости вызывать состояние с ... this.state.item. Вам нужно setState с элементом, который вы хотите иметь в состоянии. А где кнопка? :)

Mario 09.12.2018 02:13

Извините, вырежьте много, чтобы было лаконичнее. Добавил кнопку назад. Не уверен, что вы имеете в виду, если я не вызываю это с помощью оператора распространения, как мне продолжать добавлять в массив?

Joe Moran 09.12.2018 02:35
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
4
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это потому, что вы сохраняете массив внутри массива, а затем пытаетесь получить доступ к своим свойствам объекта в массиве.

Измените эту строку:

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}.

Спасибо, это было очень полезно.

Joe Moran 09.12.2018 02:53

Другие вопросы по теме