首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用yup和useForm在react上使用选项卡创建表单验证?

如何使用yup和useForm在react上使用选项卡创建表单验证?
EN

Stack Overflow用户
提问于 2022-01-23 15:25:53
回答 1查看 657关注 0票数 0

我使用yup和react表单在react和验证中创建了这个表单组件。我还在表单中创建了一个类似于选项卡的结构,以避免垂直滚动。关于用户如何通过按下next按钮或虚线导航来更改选项卡,有两个选项。问题是,在用户决定单击虚线导航或next按钮而不键入输入字段后,我无法想出如何验证这些输入字段的解决方案。所有验证都是在用户单击submit按钮后完成的。我想要的输出是,如果用户决定单击下一个或虚线导航而不提供数据,表单将触发验证而不按onsubmit。

谢谢!

代码语言:javascript
复制
const schema = yup.object().shape({
  projectName: yup.string().required('Please enter project name here'),
  projectClient: yup
    .string()
    .required('Please choose your client for this project'),
});

const createProject = () => {
const [projectInfo, setProjectInfo] = useState({
    projectName: '',
    projectClientName: '',
  });

const { register, errors, handleSubmit } = useForm({
    resolver: yupResolver(schema),
    mode: 'all',
  });
}

const handleOnSubmit = () => {
    dispatch(registerProject(projectInfo));
 };

return (

<form
              className='form-container w-full flex flex-col relative'
              onSubmit={handleSubmit(handleOnSubmit)}
            >
              
              <div
                className={`w-full ${
                  tabActive === 'Create' ? 'block' : 'hidden'
                }`}
              >
                <div className='relative rounded-tl-lg rounded-tr-lg'>
                  <h4 className='text-grey text-lg font-bold text-center tracking-wider'>
                    Create Project
                  </h4>
                  <XIcon
                    className='w-5 h-5 absolute top-0 right-0 opacity-40 cursor-pointer'
                    aria-hidden='true'
                    onClick={() => showProjectCreate(false)}
                  />
                </div>
                <div className='pt-10'>
                  <label className='text-sm font-medium' htmlFor='password'>
                    Project name
                  </label>
                  <div className='mt-2 relative'>
                    <InputElement
                      className={`w-full px-4 py-5 text-sm leading-tight rounded-md appearance-none ${
                        errors.projectName
                          ? 'border-danger focus:border-danger'
                          : 'border focus:border-primary'
                      } border focus:border-primary focus:outline-none focus:shadow-outline`}
                      id='projectName'
                      name='projectName'
                      type='text'
                      placeholder='Enter your project name here'
                      ref={register}
                      value={projectInfo.projectName}
                      onChange={handleOnChange}
                    />
                    <p className='text-xxs text-danger mt-2 absolute'>
                      {errors.projectName?.message}
                    </p>
                  </div>
                </div>
<div className='pt-10'>
                  <label className='text-sm font-medium' htmlFor='projectClientName'>
                    Project client name
                  </label>
                  <div className='mt-2 relative'>
                    <InputElement
                      className={`w-full px-4 py-5 text-sm leading-tight rounded-md appearance-none ${
                        errors.projectName
                          ? 'border-danger focus:border-danger'
                          : 'border focus:border-primary'
                      } border focus:border-primary focus:outline-none focus:shadow-outline`}
                      id='projectClientName'
                      name='projectClientName'
                      type='text'
                      placeholder='Enter your project name here'
                      ref={register}
                      value={projectInfo.projectClientName}
                      onChange={handleOnChange}
                    />
                    <p className='text-xxs text-danger mt-2 absolute'>
                      {errors.projectName?.message}
                    </p>
                  </div>
                </div>
</div>
</form>

)
}
EN

回答 1

Stack Overflow用户

发布于 2022-01-23 15:29:50

我认为你可以做验证Onblur事件?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70823600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档