Reactjs 是的+;useFormik-基于某些参数的条件必填字段

Reactjs 是的+;useFormik-基于某些参数的条件必填字段,reactjs,formik,yup,Reactjs,Formik,Yup,我有一个验证架构对象: SCHEMA = object().shape({ ... someField: string().required(validation_keys.required), ... }); 我正在我的组件中使用useFormik: const formik = useFormik({ initialValues: values, onSubmit: ..., validationSchema: SCHEMA, }); 我正在寻找一种将参数传递到模

我有一个验证架构对象:

SCHEMA = object().shape({
  ...
  someField: string().required(validation_keys.required),
  ...
});
我正在我的组件中使用
useFormik

const formik = useFormik({
  initialValues: values,
  onSubmit: ...,
  validationSchema: SCHEMA,
});
我正在寻找一种将参数传递到模式的方法,以便在参数为
true
时需要
someField
。。。我阅读了有关上下文的内容,也尝试使用
when()
,但这些都不适用于我

我的目标是基于组件属性验证
someField
,而不是来自formik的其他字段。类似于下面的示例:

validationSchema={yup.object().shape({
    someField: yup
      .string()
      .when("xxx", {
        is: true,
        then: yup.string().required("Required"),
        otherwise: yup.string(),

      })
  })
}

xxx
应该被传递到使用useFormik的React组件中的验证模式中

您可以这样做

    const validationSchema= Yup.object({
      custom_field: Yup.string().test(
        "match",
        "Custom validation enabled",
        function () {
          if (!shouldFormValidate) return true;
          return false;
        }
      )
    });

工作代码沙盒。

如果要基于React组件属性验证字段,可以使用:

范例


是否可以在不添加其他for字段的情况下执行此操作?是。您可以使用参数字段而不是附加字段。你能创建一个示例代码段吗?@jake ferguson检查更新的答案和代码沙盒。让我知道它是否回答了你的问题。这是否回答了你的问题?不,这是基于其他字段的条件验证。我想验证一个基于React组件道具的字段,而不是field.added,我想现在已经很清楚了
schema = object({
  ...,
  someField: string(),
  ...
});

if(validation_keys.required) {
  schema.fields.someField.withMutation(schema => {
    schema.required();
  });
}