He buscado en Internet literalmente en todas partes, y también en los documentos, pero no pude encontrar una solución que funcione en mi proyecto actual. Breve contexto:
Tenemos un formulario que muestra campos adicionales dependiendo de si está adding o editing . Al agregar, tenemos 2 campos diferentes. A la hora de editar, tenemos 5 campos diferentes.
Ahora, cuando estamos agregando, no quiero que se validen estos tres campos restantes. Porque serán necesarios cuando edite su formulario. Aquí es donde entrará el contexto.
Actualmente estoy usando el accesorio de validate en el <Formik /> así:
<Formik {...} validate={(values: FormValues) => { try { validateYupSchema(values, getVersionsSchema, true, { mode: "testing" }); } catch (e) { return yupToFormErrors(e); } return {}; }} > La función validateYupSchema acepta estos 4 parámetros que he completado:
values: T, schema: any, sync?: boolean, context?: any Ahora, en mi esquema de validationSchema , me gustaría acceder a este objeto de context . Actualmente, buscando en Google durante las últimas 6 horas, constantemente me recomienda este enfoque:
export const getVersionsSchema = (t: TFunction<Namespace<"en">>) => Yup.object().shape({ {...} optIn: Yup.string().when("mode", (mode, schema) => { console.log(mode, schema); return schema.required("test"); }), {...} }); Aquí puede ver que estoy usando when y aparentemente tengo que pasar la variable como un nombre de cadena como primer argumento y una función como segundo argumento con el nombre de la variable de contexto y el esquema como argumentos.
Sin embargo, cuando registro el mode en este caso, no está definido...
¿Puede alguien señalarme en la dirección correcta tal vez?
Aquí hay una caja de códigos:
https://codesandbox.io/s/condescending-water-3fmvsv?file=/src/App.js