简体   繁体   English

输入字段和提交按钮未“禁用”。 为什么?

[英]INPUT fields and SUBMIT button are not “disabled”. Why?

I have a registration form using the formik library.我有一个使用formik库的注册表单。

I want to implement this:我想实现这个:
If submitting the form, the submit button and input fields should be disabled .如果提交表单, submit按钮和input字段应该被disabled

To achieve that, I did as follows:为了实现这一点,我做了如下:

  • destructured isSubmitting and setSubmitting ,解构isSubmittingsetSubmitting
  • setSubmitting(true) in onSubmit , onSubmit中的setSubmitting(true)
  • disabled: isSubmitting within inputProps of FFInput Component, and disabled: isSubmittinginputProps组件的FFInput中,并且
  • I also wrote disabled={isSubmitting} in submit button.我还在提交按钮中写了disabled={isSubmitting}

But still disabled don't work.但仍然disabled不工作。 How to fix this problem?如何解决这个问题?

Code in codesandbox:密码箱中的代码:
https://codesandbox.io/s/quiet-sea-zkix7 https://codesandbox.io/s/quiet-sea-zkix7
For some reason another error was added in the sandbox, it is not present in the text editor由于某种原因,在沙箱中添加了另一个错误,它在文本编辑器中不存在

Note: I've commented within the code (below) to highlight these are relevant changes.注意:我已经在代码(下面)中进行了注释,以突出显示这些是相关的更改。

const FForm = () => { 
  const {
    // ...
    handleSubmit, handleChange, isSubmitting, setSubmitting  // destructured here:
  } = useFormik({                 
    initialValues: { username: '', email: '', password: '', confirm_password: '' },
    validateOnBlur: false,
    validateOnchange: false,
    validationSchema: yup.object().shape({...}),   
    onSubmit: async (formValues) => {
       console.log('submit', formValues);
       setSubmitting(true)                    //disabled
       try {
         const res = api('posts', { method:'POST', body: JSON.stringify(formValues) });
         console.log('Result!',res);
       } catch(e) {
         console.error(e);
       } finally {
         setSubmitting(false);
       }
      },    
    });

   return (
     <form className="fform" onSubmit={handleSubmit}>   
       <FFInput
         label="username"
         id="username" 
         inputProps={{
           //...
           disabled: isSubmitting,                     //disabled
         }}
         error={errors.username}
       />
      <FFInput
         label="email"
         id="email" 
         inputProps={{
           // ...
           disabled: isSubmitting,                     //disabled
         }}
         error={errors.email}
       />
       <FFInput
         label="password"
         id="password" 
         inputProps={{
           // ...
           disabled: isSubmitting,                      //disabled
         }}
         error={errors.password}
       />
       <FFInput
         label="Confirm password"
         id="confirm_password" 
         inputProps={{
           // ...
           disabled: isSubmitting,                      //disabled
         }}
         error={errors.confirm_password}
       />
       <button type="submit" disabled={isSubmitting}>   //  disabled
         Submit Form
       </button>       
   </form>
   );
};

export default FForm;

Formik gives you a bunch of tools as second parameter of your onSubmit handler, you get setSubmitting with that and then use that setSubmitting function to control the submitting state like this: Formik 为您提供了一系列工具作为 onSubmit 处理程序的第二个参数,您可以使用它获得setSubmitting ,然后使用该setSubmitting function 来控制提交 state,如下所示:

onSubmit: async (formValues, { setSubmitting }) => {
    console.log('submit', formValues);
    setSubmitting(true)                    //disabled
    try {
        const res = api('posts', { method:'POST', body: JSON.stringify(formValues)});
        console.log('Result!',res);
    } catch(e) {
        console.error(e);
    } finally {
        setSubmitting(false);
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM