Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

2.4K
Views
Uso de MUI DatePicker con yup y react-hook-form: el accesorio de error no funciona según lo previsto

Estoy trabajando en un formulario de registro hecho con yup, react-hook-form y MUI DatePicker/TextField. Me gustaría tener un campo de fecha de nacimiento que verifique si el usuario tiene más de 18 años. El mensaje de error se muestra correctamente, pero el color rojo del estado de error solo funciona si la entrada está vacía (y no cuando la edad es menor de 18 años). Estoy registrando en la consola el valor de "no válido" que dicta el color rojo, y se establece en verdadero cuando debería.

Aquí hay un enlace de sandbox: https://codesandbox.io/s/datepicker-yup-validation-8rod3?file=/src/App.js

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

esta solución se escribió con formik, yup y material datepicker:

 import "./styles.css"; import LocalizationProvider from "@mui/lab/LocalizationProvider"; import AdapterDateFns from "@mui/lab/AdapterDateFns"; import DateTimePicker from "@mui/lab/DateTimePicker"; import * as Yup from "yup"; import { useFormik } from "formik"; import { Button, TextField } from "@mui/material"; import moment from "moment"; var y = new Date(); y.setFullYear(y.getFullYear() - 18); const validationSchema = Yup.object().shape({ voyageNumber: Yup.number(), voyageStartDate: Yup.date(), voyageEndDate: Yup.date().when("voyageStartDate", (voyageStartDate, schema) => moment(voyageStartDate).isValid() ? schema.max(voyageStartDate) : schema ) }); export default function App() { const formik = useFormik({ initialValues: { voyageStartDate: moment().add(-18, "years"), voyageEndDate: null }, validationSchema: validationSchema, onSubmit: (values) => { console.log(values); } }); return ( <div className="App"> <form autoComplete="off"> <LocalizationProvider dateAdapter={AdapterDateFns}> <DateTimePicker renderInput={(props) => ( <TextField variant="standard" className="w-100" name="voyageEndDate" required {...props} error={ formik.touched?.voyageEndDate && !!formik.errors?.voyageEndDate } helperText={ formik.touched?.voyageEndDate && formik.errors?.voyageEndDate } /> )} name="voyageEndDate" label="Voyage End" value={formik.values?.voyageEndDate} onChange={(newValue) => { console.log( moment(newValue).format("YYYY-MM-DD HH:mm:ss"), moment(y).format("YYYY-MM-DD HH:mm:ss"), formik.errors ); formik.setFieldTouched("voyageEndDate"); formik.setFieldValue( "voyageEndDate", moment(newValue).format("YYYY-MM-DD HH:mm:ss") ); }} onKeyPress={() => formik.setFieldTouched("voyageEndDate")} /> </LocalizationProvider> <div style={{ marginTop: "15px" }}> <Button variant="contained" color="primary" type="submit"> Add Voyage </Button> </div> </form> </div> ); }

enlace de caja de arena

over 4 years ago · Santiago Trujillo Report

0

Solo necesita poner el atributo de error después de {...params} como este:

 <DatePicker ... renderInput={(params) => ( <TextField helperText={invalid ? error.message : null} id="dateOfBirth" variant="standard" margin="dense" fullWidth color="primary" autoComplete="bday" {...params} error={invalid} /> )} />
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!