我正在用NextJS处理一个注册表单,我使用form中的Formik和Yup进行验证,除了radio buttons之外,所有东西都正常工作.错误显示正确,但当我 Select 单选按钮时,错误不会消失.我找不到解决这个问题的办法.

这是我的表格代码:

<Formik
        initialValues={{
          email: "",
          password: "",
          confirmPassword: "",
          accountType: "",
          accountDescribe: "",
        }}
        validationSchema={validate}
        onSubmit={values => console.log("register", values)}
      >
        {formik => (
          <div>
            <Form className="space-y-6">
              <div>
                <label
                  for="email"
                  className="block text-sm font-medium text-gray-700"
                >
                  {" "}
                  Email address{" "}
                </label>
                <div className="mt-1">
                  <TextField id="email" name="email" type="email" />
                </div>
              </div>

              <div>
                <label
                  for="password"
                  className="block text-sm font-medium text-gray-700"
                >
                  {" "}
                  Password{" "}
                </label>
                <div className="mt-1">
                  <TextField
                    id="password"
                    name="password"
                    type="password"
                  />
                </div>
              </div>
              <div>
                <label
                  for="confirmPassword"
                  className="block text-sm font-medium text-gray-700"
                >
                  {" "}
                  Confirm password{" "}
                </label>
                <div className="mt-1">
                  <TextField
                    id="confirmPassword"
                    name="confirmPassword"
                    type="password"
                  />
                </div>
              </div>

              <div class="mt-4">
                <span class="text-gray-700">
                  How did you hear about us?
                </span>
                <div class="mt-2">
                  <Radio
                    type="radio"
                    name="accountType"
                    value="google"
                    label="Google"
                  />
                  <Radio
                    type="radio"
                    name="accountType"
                    value="facebook"
                    label="Facebook"
                  />
                  <Radio
                    type="radio"
                    name="accountType"
                    value="instagram"
                    label="Instagram"
                  />
                  <Radio
                    type="radio"
                    name="accountType"
                    value="person/bussiness"
                    label="Person/Bussiness"
                  />
                  <Radio
                    type="radio"
                    name="accountType"
                    value="other"
                    label="Other"
                  />
                </div>
                <span className="text-red-600">
                  <ErrorMessage
                    name="accountType"
                    className="text-red-600"
                  />
                </span>
              </div>
              <div class="mt-4">
                <span class="text-gray-700">What best describe you?</span>
                <div class="mt-2">
                  <Radio
                    type="radio"
                    name="accountDescribe"
                    value="salon, spa or barbershop owner"
                    label="Salon, spa or Barbershop Owner"
                  />
                  <Radio
                    type="radio"
                    name="accountDescribe"
                    value="licensed professional"
                    label="Licensed professional"
                  />
                  <Radio
                    type="radio"
                    name="accountDescribe"
                    value="student"
                    label="Student"
                  />
                  <Radio
                    type="radio"
                    name="accountDescribe"
                    value="school"
                    label="School"
                  />
                </div>
                <span className="text-red-600">
                  <ErrorMessage name="accountDescribe" />
                </span>
              </div>
              <div>
                <button
                  type="submit"
                  className="w-full flex justify-center py-2 px-4 border border-transparent rounded-md shadow-sm text-sm font-medium text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500"
                >
                  Register
                </button>
              </div>
            </Form>
          </div>
        )}
      </Formik>

这是我的验证模式:

const validate = Yup.object().shape({
email: Yup.string().email("Email id invalid").required("Email is required"),
password: Yup.string()
  .min(6, "Password must be at least 6 characters")
  .required("Password is required"),
confirmPassword: Yup.string()
  .oneOf([Yup.ref("password"), null], "Password must match")
  .required("Confirm password is required"),
accountType: Yup.string().required("Select one of the above button"),
accountDescribe: Yup.string().required("Select one of the above button"),
});

这是我的单选按钮组件:

import {useField} from "formik";
export const Radio = ({type, label, ...props}) => {
const [field, meta] = useField(props);
console.log(props);
return (
 <>
  <label class="inline-flex items-center mr-6">
    <input type={type} name={field.name} value={field.value} />
    <span class="ml-2">{label}</span>
  </label>
 </>
);
};

推荐答案

将此代码放入单选按钮组件中

import {useField} from "formik";
export const Radio = ({type, label,...props}) => {
   const [field, meta] = useField(props);
   return (
     <>
       <label className="inline-flex items-center mr-6">
         <input  type={type} {...field}{...props} />
         <span className="ml-2">{label}</span>
       </label>
     </>
   );
 };

Javascript相关问答推荐

调用SEARCH函数后,程序不会结束

为什么使用MAX_SAFE_INTEGER生成随机整数时数字分布不准确?

如何编辑代码FlipDown.js倒计时?

react 路由加载程序行为

确定MutationRecord中removedNodes的索引

在页面上滚动 timeshift 动垂直滚动条

useNavigation更改URL,但不呈现或显示组件

WebGL 2.0无符号整数输入变量

如何避免页面第一次加载时由于CSS样式通过JavaScript更改而出现闪烁

我正在建立一个基于文本的游戏在react ,我是从JS转换.我怎样才能使变量变呢?

React.Development.js和未捕获的ReferenceError:未定义useState

TypeError:无法分解';React2.useContext(...)';的属性';basename';,因为它为空

覆盖加载器页面避免对页面上的元素进行操作

基于产品ID更新条带产品图像的JavaScript命中错误

如何在脚本编译后直接将RxJ模块导入浏览器(无需Angel、webpack、LiteServer)

在GraphQL解析器中修改上下文值

无法使用Redux异步函数读取未定义的useEffect钩子的属性';map';

为什么当雪碧的S在另一个函数中时,Phaser不能加载它?

当达到高度限制时,如何裁剪图像?使用html和css

如何在不将整个文件加载到内存的情况下,在Node.js中实现Unix粘贴命令?