如何使用YUP验证()方法在formik表单中动态显示/隐藏输入字段?

发布于 2025-01-21 07:40:47 字数 2112 浏览 3 评论 0原文

我是初学者,并尝试使用yup验证在reactj中创建表单。我正在尝试使用具有名称的非常​​简单的表单,即LastName。而且,我尝试仅在

使用useformik挂钩

 const formik = useFormik({
        initialValues: {
            firstName: "",
            lastName: "",
            // email: ""
        }, 
        validationSchema: Yup.object({
            firstName : Yup.string().max(15,"Must be 15 chars or less").required("required"),
            lastName : Yup.string().when("firstName", {
                is:true,
                then: Yup.string().required("req")
            })
        }),
        onSubmit:(values) => {
            console.log(values)
        }
    })

yup验证验证一个名称并在提交func上

validationSchema: Yup.object({
            firstName : Yup.string().max(15,"Must be 15 chars or less").required("required"),
            lastName : Yup.string().when("firstName", {
                is:true,
                then: Yup.string().required("req")
            })
        }),
        onSubmit:(values) => {
            console.log(values)
        }
    })

验证我的实际表单时,我的实际表单

 <form onSubmit={formik.handleSubmit}> 
        <div className="input-container">
            <input
                id="firstName"
                name="firstName"
                type="text"
                placeholder="firstName"
                onChange={formik.handleChange}
                value={formik.values.firstName}
            />
             {formik.errors.firstName ? <p>{formik.errors.firstName}</p> : null}
        </div>
        <div className="input-container">
            <input
                id="lastName"
                name="lastName"
                type="text"
                placeholder="lastName"
                onChange={formik.handleChange}
                value={formik.values.lastName}
            />
           
        </div>
       
        <button type="submit">Submit</button>
    </form>

是否不确定是否应该hide/hide hide/hide lastname input字段以表单中的形式中,我已经在formik incorik inormik初始值中将其声明了目的。

I am a beginner and trying to create a form in reactjs using Yup validation. I am trying to experiment with a very simple form that has firstName, lastName. And I am trying to only show lastName field when firstName is validated

using the useFormik hook

 const formik = useFormik({
        initialValues: {
            firstName: "",
            lastName: "",
            // email: ""
        }, 
        validationSchema: Yup.object({
            firstName : Yup.string().max(15,"Must be 15 chars or less").required("required"),
            lastName : Yup.string().when("firstName", {
                is:true,
                then: Yup.string().required("req")
            })
        }),
        onSubmit:(values) => {
            console.log(values)
        }
    })

Yup validation and on submit func

validationSchema: Yup.object({
            firstName : Yup.string().max(15,"Must be 15 chars or less").required("required"),
            lastName : Yup.string().when("firstName", {
                is:true,
                then: Yup.string().required("req")
            })
        }),
        onSubmit:(values) => {
            console.log(values)
        }
    })

My actual form

 <form onSubmit={formik.handleSubmit}> 
        <div className="input-container">
            <input
                id="firstName"
                name="firstName"
                type="text"
                placeholder="firstName"
                onChange={formik.handleChange}
                value={formik.values.firstName}
            />
             {formik.errors.firstName ? <p>{formik.errors.firstName}</p> : null}
        </div>
        <div className="input-container">
            <input
                id="lastName"
                name="lastName"
                type="text"
                placeholder="lastName"
                onChange={formik.handleChange}
                value={formik.values.lastName}
            />
           
        </div>
       
        <button type="submit">Submit</button>
    </form>

Not sure if should hide/show the lastName input field in the form, I have already declared it inside Formik initial values object.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

君勿笑 2025-01-28 07:40:47

这里有两件事要处理:

  1. 看起来您只想需要lastNamefirstName具有值时。如果该假设是正确的,则可以执行这样的操作:
...
Yup.object({
  firstName: Yup.string().max(15, "Must be 15 chars or less").required("required"),
  lastName: Yup.string().when("firstName", {
    is: (firstName) => !!firstName,
    then: Yup.string().required("req"),
  }),
)},
...

在上面的示例中,is :( firstName)=&gt; !! firstName正在检查firstName是否具有值。如果仅在firstName有效时才需要lastName,则可以将该行更改为is :( firstNname)=&gt; firstName&amp; amp; firstName.length&lt; = 15

  1. 如果您只想在名字有效时显示姓氏输入,则应该有效:
<form onSubmit={formik.handleSubmit}>
  ...
  {!formik.errors.firstName ? (
    <div className="input-container">...</div>
  ) : null}
  ...
</form>

您也可以将其缩短一点,但是上述解决方案应起作用。缩短版本:

<form onSubmit={formik.handleSubmit}>
  ...
  {!formik.errors.firstName && (
    <div className="input-container">...</div>
  )}
  ...
</form>

There are two things to deal with here:

  1. It looks like you only want to require lastName when firstName has a value. If that assumption is correct, you can do something like this:
...
Yup.object({
  firstName: Yup.string().max(15, "Must be 15 chars or less").required("required"),
  lastName: Yup.string().when("firstName", {
    is: (firstName) => !!firstName,
    then: Yup.string().required("req"),
  }),
)},
...

In the above example, is: (firstName) => !!firstName is checking if firstName has a value. If you wanted to require lastName only when firstName is valid, you could change that line to is: (firstName) => firstName && firstName.length <= 15

  1. If you only want to show the last name input when first name is valid, this should work:
<form onSubmit={formik.handleSubmit}>
  ...
  {!formik.errors.firstName ? (
    <div className="input-container">...</div>
  ) : null}
  ...
</form>

You could also shorten it a bit but the above solution should work. Shortened version:

<form onSubmit={formik.handleSubmit}>
  ...
  {!formik.errors.firstName && (
    <div className="input-container">...</div>
  )}
  ...
</form>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文