首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向用户显示验证反馈

向用户显示验证反馈
EN

Stack Overflow用户
提问于 2022-02-11 14:05:32
回答 1查看 24关注 0票数 1

我做了一个简单的反应形式与反应钩子形式和是作为验证器。如果用户的输入被成功验证,我想向用户展示一些反馈,比如绿色的大纲。问题是,当输入被验证时,我只想显示绿色的大纲,而不是每次呈现组件时。我该怎么做?构成部分:

代码语言:javascript
复制
const schema = yup.object().shape({
  email: yup
    .string()
    .required("This field is required"),
  password: yup.string().required("This field is required"),
});

export const Form = () => {
  const {
    register,
    handleSubmit,
    getValues,
    formState: { errors },
  } = useForm({
    mode: "onBlur",
    resolver: yupResolver(schema),
  });

  return (
      <form noValidate onSubmit={handleSubmit(onSubmit)}>
      <label htmlFor="email">Email</label>
      <input
        id="email"
        {...register("email")}
      />
     {errors.email ? errors?.email.message : null}
       <label htmlFor="password">Password</label>
      <input
        id="password"
        type="password"
        {...register("password")}
      />
      {errors.password ? errors?.password.message : null}
      <button
        type="submit"
      >
        Submit
      </button>
    </form>  
  );
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-11 16:14:27

您可以使用触摸属性实现所需的内容。在这种场景中使用触摸属性是非常常见的。以下是你能做的:

useForm钩子中,还可以提取touchedFields

代码语言:javascript
复制
const {
    register,
    handleSubmit,
    getValues,
    formState: { errors, touchedFields }
  } = useForm({
    mode: "onBlur",
    resolver: yupResolver(schema)
  });

touchedFields属性存储被触摸的字段。当用户第一次离开该字段的焦点时,该字段就会被触摸。因此,您可以有条件地显示一条关于字段的消息,如果该字段被触摸,并且没有如下错误:

代码语言:javascript
复制
{touchedFields.email && !errors.email ? <div>Email ok</div> : null}

你可以试试这个沙箱。我希望你能从中得到这个想法。

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

https://stackoverflow.com/questions/71081408

复制
相关文章

相似问题

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