Показать сообщение отдельно
  #1 (permalink)  
Старый 15.12.2018, 18:44
Новичок на форуме
Отправить личное сообщение для Leonid_ts Посмотреть профиль Найти все сообщения от Leonid_ts
 
Регистрация: 27.08.2018
Сообщений: 6

React. Проблема с передачей event-объекта при обновлении стейта в input'e
Изучаю реакт неделю и столкнулся со следующей проблемой (ссылка на CodePen).

Есть два инпута - имейл и пароль. В них есть один обработчик осбытия onChange. В нем при каждом изменении value происходит обновление стейта компонента. И проблема заключается в том, что если обновлять стейт через функцию
handleChange = (e) => {
    this.setState(state => ({
      ...state,
      [e.target.type]: e.target.value,
    }));
 }

то, почему-то появляется ошибка "Cannot read property 'type' of null". Т.е. объект события передается с пустыми свойствами.

Однакому если деструктуризовать объект события, то всё работает
const { target } = { ...e };

this.setState(state => ({
  ...state,
  [target.type]: target.value,
}));


или так

const { target } = { ...e };
const { type } = target;
const { value } = target;

this.setState(state => ({
  ...state,
  [type]: value,
}));


Если менять стейт не в функциональном стиле, то объект события имеет правильные свойства
this.setState({
    ...this.state,
    [e.target.type]: e.target.value,
});


Вопрос: почему без структуризации, функция которая обновляет стейт получает объект события с пустыми полями. Деструтурированный объект traget (и его деструктурированные свойства) и объект e находятся же в одной области видимости. Что я упускаю?

Если можете распишите, пожалуйста, максимально подробно. Я только учусь и могу не знать очевидные для опытных программитов вещей.
Ответить с цитированием