【问题标题】:Create custom Hook to submit form in React创建自定义 Hook 以在 React 中提交表单
【发布时间】:2021-10-11 10:32:15
【问题描述】:

在我的项目中,我在提交表单时多次使用相同的逻辑。 每次提交时,我都会显示一个加载程序,然后将其删除并显示错误/成功。

有没有办法制作自定义钩子来避免它?


const [form, setForm] = useForm(initialState);
const [errors, setErrors] = useState({});
const [loading, setLoading] = useState(false);

async function submit() {
  setLoading(true);
  setErrors({});
  const request = await Api.createAccount(form);
  if(request.error) {
    setErrors(request.error.data);
    setLoading(false);
  } else {
    setLoading(false);
    //Do something
  }
}

【问题讨论】:

    标签: reactjs forms api react-hooks


    【解决方案1】:

    您可以像这样创建自定义挂钩:

    const useSubmit = ({ initialState }) => {
      const [form, setForm] = useForm(initialState);
      const [errors, setErrors] = useState({});
      const [loading, setLoading] = useState(false);
      async function submit({ onSuccess }) {
        setLoading(true);
        setErrors({});
        const request = await Api.createAccount(form);
        if (request.error) {
          setErrors(request.error.data);
        } else {
          //Do something
          onSuccess && onSuccess()
        }
      }
      return { form, setForm, submit, errors, loading };
    };
    

    并使用它:

    const { form, setForm, submit, errors, loading } = useSubmit({ initialState });
    
    submit({onSuccess: () => {...your code} })
    

    【讨论】:

    • 看起来不错,但是如果我使用提交,在自定义钩子成功后如何做一些特定的事情?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 2021-10-27
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 2018-10-02
    相关资源
    最近更新 更多