Почему мой метод handleChange отклоняется React?

#reactjs #input #react-functional-component #react-forms

#reactjs #ввод #реагирующий функциональный компонент #реагирующие формы

Вопрос:

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

Когда я пробую следующий код, он работает без проблем:

 import React, { useState } from "react";

function InputForm() {
  const [emailValue, setEmailValue] = useState("");

  console.log(emailValue);

  return (
    <>
      <form>
        <label>
          Email:
          <input
            type="text"
            name="input"
            value={emailValue}
            placeholder="type your email"
            onChange={(e) => setEmailValue(e.target.value)}
          />
        </label>
        <br />
        <br />
        <button type="submit" name="test">
          Submit Email
        </button>
      </form>
    </>
  );
}

export default InputForm;
  

Однако, когда я пытаюсь очистить его, чтобы в возврате не было логики, я получаю сообщение об ошибке при определении моего метода handleChange.

 import React, { useState } from "react";

function InputForm() {
  const [emailValue, setEmailValue] = useState("");

  handleChange(e) {
    const { name, value } = e.target;
    setEmailValue({ [name]: value });
  };

  console.log(emailValue);

  return (
    <>
      <form>
        <label>
          Email:
          <input
            type="text"
            name="input"
            value={emailValue}
            placeholder="type your email"
            onChange={handleChange}
          />
        </label>
        <br />
        <br />
        <button type="submit" name="test">
          Submit Email
        </button>
      </form>
    </>
  );
}

export default InputForm;
  

Может кто-нибудь, пожалуйста, объяснить, почему это так не работает? Ошибка, которую я получаю, заключается в том, что React не ожидает { скобка после handleChange(e) … таким образом, сообщения об ошибках консоли бесполезны при попытке выяснить, почему он его не принимает.

Спасибо!

Ответ №1:

Это не React, отклоняющий что-либо, просто, ну, это неправильный синтаксис JavaScript.

Вы захотите

 function InputForm() {
  const [emailValue, setEmailValue] = useState("");

  const handleChange = (e) {
    const { name, value } = e.target;
    setEmailValue({ [name]: value });
  };

  // ...
  

(и даже в этом случае вы смешиваете и сопоставляете типы состояний — у вас есть атом состояния, который якобы является строкой (поскольку вы инициализируете его с помощью a "" ), а затем вы присваиваете ему объект… Возможно, вы ищете setEmailValue(value); там.)

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

1. Хорошо, поэтому, если я обновлю синтаксис, чтобы он был более похожим на этот, я все равно не смогу заставить его работать. Я в замешательстве. Я хочу, чтобы входные данные отслеживали отправку электронной почты, поэтому это должна быть строка. Итак, почему он возвращает объект?

2. См. Раздел, заключенный в скобки. Вы присваиваете объект.