реагирует: массив не определен - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть массив, внутри которого есть объекты, которые выглядят так

OrchardSite > Array(16) > 0: {blocks: Array (3), name: "asdasd", code: "R101A"}
                          1: {blocks: Array (7), name: "dasdas", code: "R555"}

У меня есть JSX, который выглядит следующим образом

<select className="input-field-slider dropdown w-select" onChange={() => this.setOrchard}>
    <option>All Sites</option>
    {orchardSites
        .map((orchardSite, i) => (
            <option key={i} value={orchardSite.code}>
                {orchardSite.code + " " + orchardSite.name}
            </option>
        ))}

Каждый раз, когда пользователь выбирает опцию из выпадающего меню, у меня запускается эта функция.

setOrchard = (event) => {
  const orchardId = event.target.value;

  console.log("orchardID", orchardId) // returns selected ID
  console.log("OrchardSite", this.props.metadata.OrchardSites) // returns array
  console.log("testing1", this.props.metadata.OrchardSites[parseInt("R1018A")] // undefined
  console.log("testing2", this.props.metadata.OrchardSites[parseInt(orchardId)]) // undefined
  console.log("new value", this.props.metadata.OrchardSites[parseInt(orchardId)].blocks) // Cannot read property 'blocks' of undefined

   if (orchardId.length > 0) {
      if (!this.props.metadata.OrchardSites[parseInt(orchardId)].blocks) 
          this.props.metadata.orchardSites[parseInt(orchardId)].blocks = []
            console.log("SetttingOrchardLocation", this.props.metadata.orchardSites)
            this.setState({ orchardId: orchardId, block: null, area: null, row: null, site: Object.assign({}, this.props.metadata.orchardSites[parseInt(orchardId)]) })
            console.log("Testing OrchardId", this.props.metadata.orchardSites[parseInt(orchardId)])
        // parseInt to get access to the array index, (Maybe I need to .ToString() somewhere?
    }
}

Что возвращает ..

Uncaught TypeError: Невозможно прочитать «блоки» свойств неопределенного

Как мне получить доступ к этому массиву?

1 Ответ

0 голосов
/ 04 апреля 2019

Если оба сайта orchardSites (в вашем jsx и в функции onClick) одинаковы, то вы хотите получить доступ к массиву, используя индекс массива (i в jsx) вместо кода orchardSite.code.

Это потому, что OrchardSites [orchardSite.code] может быть неопределенным в некоторых случаях, но OrchardSites [parseInt (i)] не будет.

Я предлагаю вам изменить атрибут «value» на «i» вместо orchardSite.code

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...