javascript - 如何使用 react 以多步形式进行验证

标签 javascript reactjs react-hooks react-hook-form

我正在处理一个场景,我必须做一个我已经完成的多步骤表单,以及验证部分。我正在使用 react-hook-form用于验证。
我有多步形式:

  • 在第一个表单中,我有几个字段和一个单选按钮
  • 默认情况下,为 auto generated pass 勾选了单选按钮所以在这种情况下我无事可做
  • 第二个是 let me create a password所以在这种情况下,将显示一个输入字段,用户将创建密码

  • 问题
    在我的最终表格中,我正在做如下验证:
    {
      fields: ["uname", "email", "password"], //to support multiple fields form
      component: (register, errors, defaultValues) => (
        <Form1
          register={register}
          errors={errors}
          defaultValues={defaultValues}
        />
      )
    },
    
    因此,为了验证 uname、电子邮件和密码,我传递了上述值。
    但是当为自动生成的密码勾选单选按钮时,它仍在处理验证,我点击下一步,由于密码字段,它不会下一步。
    如果我将单选按钮检查为 let me create the password它转到下一个表单,当我点击 back 回来时它要去auto generated password再次,它没有保持以前的状态。对于其他输入字段,它正在处理以前的值,但不是在单选按钮方案的情况下。
    My full working code sandbox

    最佳答案

    答案 1 原因是你fields: ["uname", "email", "password"]已修复,password总是要采取验证。
    解决方案 需要存储 Form1 的状态在应用程序中,您可以检查 auto generated password 的状态正在从列表中删除密码
    应用程序.js

    ... other code
    // need to move state and function form Form to app
    const [show_input, setshow_input] = useState(false);
    
      const createInput = () => {
        setshow_input(true);
      };
      const auto_text = () => {
        setshow_input(false);
      };
      const forms = [
        {
          // validate based on show_input state
          fields: show_input ? ["uname", "email", "password"] : ["uname", "email"], //to support multiple fields form
          component: (register, errors, defaultValues) => (
            <Form1
              register={register}
              errors={errors}
              defaultValues={defaultValues}
              auto_text={auto_text}
              createInput={createInput}
              show_input={show_input}
            />
          )
        },
        {
          fields: ["lname"],
          component: (register, errors, defaultValues) => (
            <Form2
              register={register}
              errors={errors}
              defaultValues={defaultValues}
            />
          )
        },
        {
          component: (register, errors, defaultValues) => (
            <Form3
              register={register}
              errors={errors}
              defaultValues={defaultValues}
            />
          )
        }
      ];
    ... other code
    
    答案 2 下次去的时候Form1被卸载所以它的状态被破坏。当您在 App.js 中存储 Form1 的状态时,您也将解决此问题
    奖励:最好使用camalCase(例如:showInput)而不是下划线(show_input)
    Edit serene-fast-jj8br

    关于javascript - 如何使用 react 以多步形式进行验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62869765/

    相关文章:

    javascript - React hooks setState 没有立即更新

    reactjs - React hooks useEffect : include some dependencies but ignore others

    Javascript CORS - 不存在 'Access-Control-Allow-Origin' header

    javascript - 在 ejs 和 nodejs 中 POST http ://localhost:3000/socket. io/?EIO=3&transport=polling&t=NQUneY3 400(错误请求)

    java - selenium:如果同一页面上已存在具有相同名称、值、id 的相同按钮,如何选择要单击的按钮?

    javascript - 在 React 中更改 mousedown 和 mousemove 的宽度

    javascript - 在 Firebug : ReferenceError - s is not defined 中设置监视表达式

    javascript - Gatsby Remark 图像和 Gatsby 图像之间的区别?

    reactjs - Mobx-react 控制台警告相关观察者