Является ли это целевым атрибутом события деструктурирования или каким-либо синтаксисом JSX?

#javascript #reactjs #jsx #es6-modules #destructuring

#javascript #reactjs #jsx #es6-модули #деструктурирование

Вопрос:

Я получил здесь функцию обработчика событий, которая используется для обработки onChange событий полей ввода.

Я не понимаю, как [e.target.name] работает / что именно делает.

(Я знаю, что он получает name значение атрибута целевого поля ввода).

 const handleOnChange = (e) => setFormData({ ...formData, [e.target.name]: e.target.value });
  

Может кто-нибудь, пожалуйста, объяснить, что это делает и как это работает? Очень ценится.

Комментарии:

1. это называется property accessors , взгляните на это: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference /…

2. если вы используете react 16, лучше сохранить событие в переменной, потому что react будет обновлять состояние асинхронно, поэтому событие может исчезнуть, когда react захочет получить к нему доступ. это не относится к предстоящему react 17.

3. @adel Обновление состояния выполняется асинхронно, но переданный аргумент состояния вычисляется синхронно, если вы не используете вариант обратного вызова и не передаете функцию для вычисления нового состояния.

4. @3limin4t0r да, вы правы, мое плохое использование обратного вызова с setstate приведет к сбою приложения.

Ответ №1:

[e.target.name] Это то, что в JS называется вычисляемым свойством.

Проще говоря, [e.target.name] станет свойством объекта (ключом) со значением e.target.name . Например, если e.target.name соответствует (имеет значение) credit , структура объекта будет выглядеть следующим образом:

   setFormData({
    ..formData,
    credit: e.target.value

  }); 
  

Это просто JavaScript, а точнее, функция языка ES6.


Еще одна важная вещь, которую следует помнить о onChange обработчике событий React, заключается в том, что он ведет себя совершенно иначе, чем собственное событие JS onchange . Прочитайте этот пост для получения дополнительной информации.


Ссылки

Вычисляемые имена свойств