Ориентация на свойства вложенного объекта внутри родительского объекта - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь изменить состояние времени открытия / закрытия (и сообщения до конечной точки) на несколько дней, которые возвращаются мне в объекте, например, так:

enter image description here

Я сделал это в компоненте React:

{this.state.time.map(each => (
    <Fragment key={each.code}>
        <OpeningHours
            code={each.code}
            day={each.description}
            name={each.code}
            open={each.open !== null ? each.open : '00:00'}
            close={each.close !== null ? each.close : '00:00'}
            onChange={this.onTimeChange}
        />
    </Fragment>
))}

enter image description here

Как бы я перебрал массивобъекты, пока я не найду индекс времени открытия или закрытия this день?До сих пор я пробовал это, и это работает, но только если было, скажем, время открытия или одно поле в целом.Проблема возникает, так как у меня есть 2 поля для редактирования:

onTimeChange(e) {
  let inputs = this.state.inputs.slice();
  for(let i in inputs){
      if(inputs[i].name == event.target.name){
          inputs[i].value = event.target.value;
          this.setState ({inputs});
          break;
      }
  }
}

1 Ответ

0 голосов
/ 28 февраля 2019
 const newInputs = inputs.map(p =>

      p.name === <unique_name/code>
        ? { ...p, [e.target.name]: e.target.value }
        : p
    );
    this.setState({inputs:newInputs,});

Измените метод onTimeChange (), чтобы получить уникальное имя: onTimeChange(e, code)

Простой пример: https://codesandbox.io/s/v1y14rl2oy

Поскольку индекс уникален, вы можете сделать

inputs[index] = { ...inputs[index], [e.target.name]: e.target.value } тоже без использования map() как в песочнице.

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