react-hook-form - 每次提交后为空输入字段

use*_*537 5 reactjs react-hooks

我试图了解 react-hook-form 是如何工作的。为此,我创建了以下示例:

import React from 'react';
import { useForm } from 'react-hook-form';

const InputForm = () => {
  const { register, handleSubmit } = useForm();

  const onSubmit = (data) => {
    console.log(data);
  };

  return (
    <>
      <Form onSubmit={handleSubmit(onSubmit)}>
        <Form.Group controlId='formBasicName'>
          <Form.Label>Name</Form.Label>
          <Form.Control
            type='text'
            name='name'
            ref={register}
          />
        </Form.Group>

        <Form.Group controlId='formBasicEmail'>
          <Form.Label>Email address</Form.Label>
          <Form.Control
            type='email'
            name='email'
            ref={register}
          />
          
        <Button className='submitBtn' type='submit'>
          Submit
        </Button>
      </Form>
    </>
  );
};

export default InputForm;
Run Code Online (Sandbox Code Playgroud)

它有效,如果我提交表单,我可以在控制台中看到数据对象。唯一的问题是每次提交后,输入框仍然显示它们的值。我希望每次提交后输入框的值变空。使用 useState 会很容易,但是现在我正在使用 react-hook-from,我不知道该怎么做。

Phi*_*cks 13

请不要接受之前的答案 - RHF 文档(请参阅规则和Submit With Reset选项卡)不同意回调reset内部onSubmit

建议不要在 onReset 或 onSubmit 回调中调用重置。

正确的方法是useEffect在所有异步工作完成后更新:

const { reset } = useForm();
const [isSafeToReset, setIsSafeToReset] = useState(false);
  
useEffect(() => {
   if (!isSafeToReset) return;

   reset(result); // asynchronously reset your form values
}, [reset])

const onSubmit = async (data, e) => {
    try {
      await fetch('./api/formValues.json'); 
      setIsSafeToReset(true);
    } catch (e) {
      // do something w Err
    }
};

Run Code Online (Sandbox Code Playgroud)


Shi*_*BR2 11

使用这个提交功能:

const onSubmit = (data, e) => {
  e.target.reset();
};

Run Code Online (Sandbox Code Playgroud)

  • 这不应该是公认的答案 - React Hook Form 文档明确表示在提交期间“不”重置:https://react-hook-form.com/api/useform/reset &gt; 建议不要在 onReset 内调用重置或 onSubmit 回调。 (2认同)

小智 9

const InputForm = () => {
  const { register, handleSubmit, reset } = useForm();

  const onSubmit = (data) => {
    console.log(data);
    reset();
  };
Run Code Online (Sandbox Code Playgroud)

将其添加到提交功能


Joe*_*oel 6

React Hook 表单 v7. 这将清除表单数据。

    const {register, handleSubmit, formState: { errors }, reset} = useForm();

    const onSubmit = (data, e) => {
        console.log(data)
        reset('', {
            keepValues: false,
        })
    }
Run Code Online (Sandbox Code Playgroud)