Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

179
Vistas
Advertencias sobre el estado de actualización de <select> en función del estado del estado anterior de <select>

Tengo dos menús desplegables, los valores del segundo menú desplegable deben actualizarse según el estado del primer menú desplegable. Aunque el código parece funcionar, recibo advertencias de out-of-range value . ¿Cómo puedo mejorar este código para que desaparezcan las advertencias?

MWE en Codesandbox

El componente completo en caso de que se prefiera.

 const MyForm = () => { const [state1, setState1] = useState(list1[0]); const [state2, setState2] = useState(list2[0]); return ( <> <FormControl fullWidth sx={{ marginY: "16px" }}> <InputLabel>List 1</InputLabel> <Select label="List 1" value={state1.code} onChange={(e) => { const tmpState1 = list1.find( (item) => item.code === e.target.value ); setState1(tmpState1); }} > {list1.map((item) => { return ( <MenuItem value={item.code} key={item.name}> {item.name} </MenuItem> ); })} <MenuItem value={""}>All</MenuItem> </Select> </FormControl> <FormControl fullWidth sx={{ marginY: "16px" }}> <InputLabel>List 2</InputLabel> <Select label="List 2" value={state2.name} onChange={(e) => { const tmpState2 = list2.find( (item) => item.name === e.target.value ); console.log(tmpState2); setState2(tmpState2); }} > {list2 .filter((item) => item.code === state1.code) .map((item) => { return ( <MenuItem value={item.name} key={item.name}> {item.name} </MenuItem> ); })} </Select> </FormControl> </> ); }; export default MyForm;
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

El problema era que cuando se actualizaba la variable state1 , el valor del segundo menú desplegable no se encontraba en la lista de <MenuItem> s actualizados. Por lo tanto, lanza una advertencia.

Una solución simple es actualizar el valor en el segundo menú desplegable cuando cambia el state1 :

 //... <FormControl fullWidth sx={{ marginY: "16px" }}> <InputLabel>List 1</InputLabel> <Select label="List 1" value={state1.code} onChange={(e) => { const tmpState1 = list1.find( (item) => item.code === e.target.value); {/* this is the fix */} setState2(list2.find((item) => item.code === tmpState1.code)); setState1(tmpState1); }} > {list1.map((item) => { return ( <MenuItem value={item.code} key={item.name}> {item.name} </MenuItem> ); })} <MenuItem value={""}>All</MenuItem> </Select> </FormControl> //...
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda