尝试使Formik多步验证。如何验证字段?

时间:2019-12-19 13:08:38

标签: javascript reactjs formik

我正在尝试在Formik中进行字段验证。问题是我制作了一个多步骤表单,我的方法是制作了一个组件数组,并基于pages [state]使用它们,但我不知道该如何发送道具。 我想验证该字段是否仅包含两位数字,如果没有,则显示错误消息


const SignUp = () => {
  const state = useSelector((state: RootState) => state);
  console.log("state", state);

  const dispatch = useDispatch();
  return (
    <Formik
      initialValues={{ firstName: "", lastName: "", email: "" }}
      onSubmit={values => {
        setTimeout(() => {
          alert(JSON.stringify(values, null, 2));
        }, 500);
      }}
      render={({ errors, touched, isValidating }) => (
        <Form>
          <div>{pages[state]}</div>
          <button
            type="button"
            onClick={() => {
              dispatch(decrement());
            }}
          >
            Prev
          </button>
          <button
            type="button"
            onClick={() => {
              pages.length - 1 <= state
                ? console.log("No more pages")
                : dispatch(increment());
            }}
          >
            Next
          </button>
        </Form>
      )}
    />
  );
};

const Page2 = () => {
  return (
    <>
      <h1>
        What is your <span id="idealWeightText">ideal weight</span> that you
        want to reach?
      </h1>
      <Input
        name={"firstName"}
        htmlFor={"firstName"}
        type={"number"}
        validation={validateKilograms}
      />
    </>
  );
};

const Input: React.FC<FieldProps> = ({
  name,
  onChange,
  htmlFor,
  type,
  validation,
  placeholder
}) => {
  return (
    <>
      <label htmlFor={name}>
        <Field
          type={type}
          name={name}
          placeholder={placeholder}
          validate={validation}
          onChange={onChange}
        />
        kg
      </label>
    </>
  );
};

1 个答案:

答案 0 :(得分:0)

有一个名为Yup的库,您可以使用它,您将可以自由设置条件验证。

Yup最适合于formik进行验证。

每一步之后,您可以启用一个标志并相应地设置验证。

我也建议您使用withFormik。代替formik,是因为您可以在那里创建一个单独的文件进行验证并提供其路径。这样也可以改善您的文件夹结构。