[英]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:为了实现这一点,我做了如下:
isSubmitting
and setSubmitting
,isSubmitting
和setSubmitting
,setSubmitting(true)
in onSubmit
, onSubmit
中的setSubmitting(true)
,disabled: isSubmitting
within inputProps
of FFInput
Component, and disabled: isSubmitting
在inputProps
组件的FFInput
中,并且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.