下面是我使用formikReact表单验证代码.默认情况下,加载表单时,我希望保持"提交"按钮处于禁用状态:

import { useFormik } from "formik";
import * as Yup from "yup";

const formik = useFormik({
    initialValues: {
      firstName: "",
      lastName: "",
      email: ""
    },
    validationSchema: Yup.object({
      firstName: Yup.string()
        .max(15, "Must be 15 characters or less")
        .min(3, "Must be at least 3 characters")
        .required("Required"),
      lastName: Yup.string()
        .min(3, "Must be at least 3 characters")
        .max(20, "Must be 20 characters or less")
        .required("Required"),
      email: Yup.string()
        .email("Invalid email address")
        .required("Required")
    }),
    onSubmit: values => {
      handleSubmit(values);
    }
  });

我试着在我的按钮上使用这个:

 disabled={!formik.isValid}

但只有当我try 提交表格时,它才真正起作用.因此,如果我将表单留空并点击submit,所有验证错误都会显示,然后该按钮将被禁用.但是,它应该从一开始就被禁用.我查看了documentation,但没有看到任何明显的东西.

推荐答案

当你想使用下面的dirty : boolean按钮时,可以使用下面的dirty : boolean按钮:

disabled={!formik.dirty}

如果希望在所有字段值有效之前禁用submit按钮,则可以使用isValid: boolean,其工作原理如下:

如果没有错误(即错误对象为空),则返回true,否则返回false.

因此,您可以将其用作:

disabled={!formik.isValid}

现在,if you want the submit button to be disabled until all the fields are valid and if the fields values have been changed from their initial values那么您必须结合使用上述两个属性,如下所示:

disabled={!(formik.isValid && formik.dirty)}

Reactjs相关问答推荐

如何在Pivot模式下自定义标题?

react 路由导航不工作,但手动路由工作

如何用Reaction做交互式的MathML?

在Map()完成React.js中的多个垃圾API请求后执行函数

React-React中是否完全支持基于类的组件?

使用experial_useFormState将参数传递给服务器操作

Mui 在 TextField 标签上添加工具提示显示两个工具提示框

Firebase查询返回随机用户数据,而不是过滤后的用户数据

无法从子组件传递数据到父组件

React 组件列表中的第一个计时器正在获取值 NaN

Zod 验证模式根据另一个数组字段使字段成为必需字段

使用 toast 时挂钩调用无效

将 clerk 与 supabase 集成的最佳实践

使用 react pro 侧边栏展开折叠菜单

将props 传递给 NextJS 布局组件

将 ref 转发到所有页面(路由组件)只是为了将其应用于
并具有跳过导航链接(按钮).有没有更好的办法?

如何向 surveyjs 调查添加多个结尾?

react-markdown 不渲染 Markdown

react-admin useGetIdentity 只返回全名,id 未定义 头像未定义

axios post方法中的请求失败,状态码为500错误