【发布时间】:2022-06-20 18:04:53
【问题描述】:
我有一个 Formik 表单,它有两个单选按钮,要求用户选择他是工作人员还是学生,然后根据他的选择,我将能够显示不同的字段供用户填写使用是的验证。 我不知道如何在这里使用 when() 方法!!
这是我的Formik
<Formik
initialValues ={{
name: '',
school: '',
jobType: '',
parentName: '',
parentPhone: '',
parentEmail: '',
staffPhone:'',
staffEmail: '',
condition:'',
}}
onSubmit={async (values) => {
await new Promise((r) => setTimeout(r, 500));
alert(JSON.stringify(values, null, 2));
}}
validationSchema={validate}
>
I am trying to use Yup validation to show the fields based on the users choice
my validation Schema
const validate = Yup.object({
name: Yup.string()
.max(20, "Must be 20 characters or less" )
.required('required'),
school: Yup.string().required('Please select your school').oneOf(schools),
jobType: Yup.string().required("are you a student or a staff member ?!"),
parentName: Yup.string().when('jobType', {
is: true ,
then: Yup.string().required('Field is required')
}),
至于表格本身:
<div id="my-radio-group">Job type</div>
<ErrorMessage name="jobType" />
<div role="group" aria-labelledby="my-radio-group">
<label>
<Field type="radio" name="jobType" value="student" />
Student
</label>
<label>
<Field type="radio" name="jobType" value="staff member" />
Staff member</label>
{console.log({values})}
{/* <div>Picked: {values.jobType}</div> */}
</div>
<button className="btn btn-dark mt-3" type="submit"> Register</button>
【问题讨论】:
-
以防万一它可能有帮助,我对你的验证做了一个小编辑,希望它能工作 parentName: Yup.string().when('jobType', { is: (value) => value === "student", then: Yup.string().required('Field is required') }), 但是仍然没有出现!!
标签: reactjs forms validation formik yup