在Formik中禁用按钮直到填写完所有表单域,可以通过以下步骤实现:
npm install formik
import { Formik, Form, Field, ErrorMessage } from 'formik';
const MyForm = () => {
return (
<Formik
initialValues={{ /* 初始化表单字段的值 */ }}
validate={values => { /* 表单字段验证逻辑 */ }}
onSubmit={values => { /* 表单提交逻辑 */ }}
>
<Form>
{/* 表单域 */}
<Field type="text" name="fieldName" />
{/* 错误消息 */}
<ErrorMessage name="fieldName" component="div" />
{/* 提交按钮 */}
<button type="submit" disabled={/* 判断是否禁用按钮 */}>
提交
</button>
</Form>
</Formik>
);
};
isValidating
和dirty
属性来判断是否禁用按钮。isValidating
表示表单是否正在进行验证,dirty
表示表单是否有任何更改。根据这两个属性的值,可以设置按钮的disabled
属性:<button type="submit" disabled={formikProps.isSubmitting || formikProps.isValidating || !formikProps.dirty}>
提交
</button>
import React from 'react';
import { Formik, Form, Field, ErrorMessage } from 'formik';
const MyForm = () => {
return (
<Formik
initialValues={{ fieldName: '' }}
validate={values => {
const errors = {};
if (!values.fieldName) {
errors.fieldName = '必填字段';
}
return errors;
}}
onSubmit={values => {
// 处理表单提交逻辑
}}
>
{formikProps => (
<Form>
<Field type="text" name="fieldName" />
<ErrorMessage name="fieldName" component="div" />
<button type="submit" disabled={formikProps.isSubmitting || formikProps.isValidating || !formikProps.dirty}>
提交
</button>
</Form>
)}
</Formik>
);
};
export default MyForm;
这样,当用户开始填写表单时,按钮将会被禁用,直到所有表单域都被填写完毕。如果有任何表单域未填写或存在错误,用户将无法提交表单。
领取专属 10元无门槛券
手把手带您无忧上云