【问题标题】:Form values coming as blank on submit表单值在提交时为空白
【发布时间】:2021-05-09 00:38:42
【问题描述】:

无法从下表中选择email and token 的值。点击提交时显示为空白。谁能告诉我哪里做错了?

https://codesandbox.io/s/dazzling-kirch-1gqq4?file=/src/App.js

import React, { useRef, useEffect, useState } from "react";
import { useForm } from "react-hook-form";
import Axios from "axios";

const CreateLink = () => {
  const [email, setEmail] = useState("");
  const [token, setToken] = useState("");
  const {
    handleSubmit,
    register,
    formState: { errors }
  } = useForm();

  const onSubmit = (e) => {
    e.preventDefault();
    alert(`Sending Email ${email}`);
    const fetchData = async () => {
      try {
        const res = await Axios.post(
          "http://localhost:8000/service/createlink",
          email,
          token
        );
        if (res.data.success) {
          console.log("Link token created:" + res.data.success);
        }
      } catch (e) {
        console.log(e);
      }
    };
    fetchData();
  };

  return (
    <div className="App">
      <h1>Create Link</h1>
      <form onSubmit={handleSubmit(onSubmit)} className="linkForm inputForm">
        <div className="inputField">
          <input
            name="email"
            placeholder="email"
            type="text"
            value={email}
            onChange={(e) => setEmail(e.target.value)}
            {...register("email", {
              required: "Email is required",
              pattern: {
                value: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i,
                message: "Invalid email address"
              }
            })}
          />
          <span className="loginErrorTextFormat">
            {errors.email && <p>{errors.email.message}</p>}
          </span>
        </div>
        <div className="inputField">
          <input
            placeholder="token"
            name="token"
            type="text"
            value={token}
            onChange={(e) => setToken(e.target.value)}
            {...register("token", {
              required: "Token is required"
            })}
          />
          <span className="loginErrorTextFormat">
            {errors.token && <p>Input is not valid</p>}
          </span>
        </div>
        <input type="submit" />
      </form>
    </div>
  );
};

export default CreateLink;

【问题讨论】:

    标签: reactjs react-hooks


    【解决方案1】:

    因为register 返回的对象具有属性onChange。所以它会覆盖你的onChange,你只需要在register之后移动onChange

        {...register("token", {
          required: "Token is required"
        })}
        onChange={(e) => setToken(e.target.value)}
    

    【讨论】:

    • 感谢您的回复,