无法在 React js 中输入表单的输入字段

Cant type in an input field of a form in React js

我是 React js 新手。我尝试 post axios 使用 react hooks 调用。但是在执行代码并启动服务器后,我无法输入表单。以前我可以打字。我只能在 phone 和电子邮件字段中输入。我无法输入 first_name、last_name 和消息字段。我不知道是什么问题。

我的MessageForm.js:

const MessageForm = () => {
  const url = 'https://example.herokuapp.com/api/messages'
  const [data, setData] = useState({
    first_name: "",
    last_name: "",
    email:"",
    phone:"",
    msz:""

  })
  function submit(e){
    e.preventDefault();
    axios.post(url,{
      first_name: data.first_name,
      last_name:data.last_name,
      email:data.email,
      phone:data.phone,
      msz:data.msz
    })
    .then(res=>{
      console.log(res.data)
    })
  }

  function handle(e){
      const newdata = {...data}
      newdata[e.target.id] = e.target.value
      setData(newdata)
      console.log(newdata)
  }

  return (
    <div className="message-form">
      <div className="container">
        <div className="title">
          <span>Contact Now</span>
          <div className="main-title">Send us a message</div>
        </div>
        {/* form start */}
        <form action="" className="apply" onSubmit={(e)=> submit(e)}>
          <div className="row row-1">
            {/* Name here */}
            <div className="input-field name">
              <label htmlFor="Name">First Name</label>
              <input onChange ={(e) => handle(e)} value = {data.first_name}
                type="text"
                placeholder="Your First Name"
                name="Name"
                id="name"
              />
            </div>
            <div className="input-field name">
              <label htmlFor="Name">Last Name</label>
              <input onChange ={(e) => handle(e)} value = {data.last_name}
                type="text"
                placeholder="Your Last Name"
                name="Name"
                id="name"
              />
            </div>
          </div>

          <div className="row row-2">
            {/* phone here */}
            <div className="input-field phone">
              <label htmlFor="Phone">Phone</label>
              <input onChange ={(e) => handle(e)} value = {data.phone}
                type="text"
                placeholder="Your Phone Here"
                name="Phone"
                id="phone"
              />
            </div>

            {/* Email here */}
            <div className="input-field email">
              <label htmlFor="Email">Email Address</label>
              <input onChange ={(e) => handle(e)} value = {data.email}
                type="text"
                placeholder="Your Email Address"
                name="Email"
                id="email"
              />
            </div>
          </div>

          {/* date select */}
          <div className="row row-3">
            {/* Message here */}
            <div className="input-field message">
              <label htmlFor="Message">Message</label>
              <textarea onChange ={(e) => handle(e)} value = {data.msz}
                placeholder="Enter Message Here"
                name="Message"
                id="message"
              />
            </div>
          </div>

          {/* submit button */}
          <ExploreButton hoverText="Submit" hover="hoverTrue">
            Send Now
          </ExploreButton>
        </form>
        {/* Form end */}
      </div>
    </div>
  );
};

export default MessageForm;

这是因为您将 id="name" 分配给 first_namelast_name 字段。所以它不会更改数据对象中的正确字段。

first_name 上的示例:

 const handleInputChange = e => {
   setData(d => ({...d, [e.target.id]: e.target.value}))
 }

 <input onChange ={(e) => handle(e)} value = {data.first_name}
                onChange={handleInputChange}
                type="text"
                placeholder="Your First Name"
                name="Name"
                id="first_name"
              />

PS:你不需要做onChange={e => handle(e)}。该句柄将默认使用 e 参数:onChange={handle}

id="name" 更新为 id="first_name"id="last_name"

id="message" 更新为 id="msz"

关键状态名称必须与id

相同