Quiero validar la confirmación de la contraseña con Yup pero no funciona.
Este es mi código:
<template> <form @submit="onSubmit"> <div> <label for="password">Password</label> <div> <input id="password" v-model.trim="password" name="password" /> </div> </div> <div>{{ passwordErrorMessage }}</div> <br> <div> <label for="confirmPassword">Confirm Password</label> <div> <input id="confirmPassword" v-model.trim="confirmPassword" name="confirmPassword" /> </div> </div> <div>{{ confirmPasswordErrorMessage }}</div> <br> <button>Submit</button> </form> </template> <script> import { useField, useForm } from "vee-validate"; import * as yup from "yup"; export default { setup() { const { handleSubmit } = useForm(); const onSubmit = handleSubmit((values) => { alert(JSON.stringify(values, null, 2)); }); const { value: password, errorMessage: passwordErrorMessage } = useField( "password", yup .string() .required() .min(5) ); const { value: confirmPassword, errorMessage: confirmPasswordErrorMessage } = useField( "confirmPassword", yup .string() .required() .oneOf([yup.ref("password")], "Passwords do not match"), ); return { password, passwordErrorMessage, confirmPassword, confirmPasswordErrorMessage, onSubmit } } }; </script>Este es el código de demostración en codesandbox
Al ejecutar el código anterior, no aparece ningún error, pero la confirmación de la contraseña no funciona.
¿Alguien puede ayudar a que la confirmación de la contraseña funcione?
Aparentemente, la única forma en que funciona es mediante el uso de validationSchema en useForm
La función de configuración final se verá así:
setup() { const { handleSubmit } = useForm({ validationSchema: yup.object({ password: yup.string().required().min(5), confirmPassword: yup .string() .required() .oneOf([yup.ref("password")], "Passwords do not match"), }), }); const onSubmit = handleSubmit((values) => { alert(JSON.stringify(values, null, 2)); }); const { value: password, errorMessage: passwordErrorMessage } = useField( "password" ); const { value: confirmPassword, errorMessage: confirmPasswordErrorMessage, } = useField("confirmPassword"); return { password, passwordErrorMessage, confirmPassword, confirmPasswordErrorMessage, onSubmit, }; },