为什么我的handleChange方法被React拒绝了?

问题描述

我正在尝试做一个简单的表单任务来尝试和学习React Forms,但是我很难理解它的语法。

当我尝试以下代码时,它没有问题:

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,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)之后的括号...因此,控制台错误消息对于试图弄清为什么它不接受它毫无用处。

谢谢!

解决方法

这不是React拒绝任何东西,仅仅是,那不是正确的JavaScript语法。

你想要

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

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

  // ...

(即使您正在混合和匹配状态类型,也有一个状态原子表面上是一个字符串(因为您使用""对其进行了初始化),然后在其中分配了一个对象...您可能正在那里寻找setEmailValue(value);。)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...