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

149
Vistas
Formulario React-Bootstrap. Verifique el comportamiento extraño en el primer clic

Estoy tratando de filtrar en una lista de objetos y he creado un objeto useState que mantendrá el estado de todos los filtros, que se ve así:

 const [filterState, setFilterState] = useState({ "sell": false, "buy": false, "startDate": "", "endDate": "", "location": "", "music": false, "theatre": false, "movie": false, });

Estoy usando dos Form.Check de "react-bootstrap" para cambiar los campos "vender" y "comprar", pero me están dando algunos problemas, el objeto filterState no cambia hasta que haya hecho clic en los objetos Form.Check dos veces, solo la interfaz de usuario se actualiza correctamente, lo cual es extraño cuando el objeto filterState decide el estado marcado. Entonces, lo que se muestra es lo opuesto al estado del objeto filterState.

Código para los campos Form.Check:

 <Form.Check checked={filterState.buy} onChange={onBuyChange} id="buy" type="checkbox" label={`Ønskes kjøpt`}/> <Form.Check checked={filterState.sell} onChange={onSellChange} id="sell" type="checkbox" label={`Til salgs`}/>

Las funciones onChange:

 const onSellChange = () => { setFilterState({ ...filterState, "sell": !filterState.sell } ); console.log(filterState); } const onBuyChange = () => { setFilterState({ ...filterState, "buy": !filterState.buy } ); console.log(filterState); }

Ejemplos

Estado inicial:
ingrese la descripción de la imagen aquí

Hacer clic una vez no cambia el estado:
ingrese la descripción de la imagen aquí

Al hacer clic nuevamente, se actualiza el estado, pero ahora está sincronizado:
ingrese la descripción de la imagen aquí


Impresión antes y después de setFilterState

Otro comportamiento extraño que obtengo es que imprimir filterState antes y después de setFilterState da el mismo resultado. ¿Se debe cambiar filterState antes de pasar a la siguiente línea? ¿setFilterState funciona de forma asincrónica de alguna manera, lo que puede hacer que Form.Check lea antes de que el valor haya cambiado? ingrese la descripción de la imagen aquí

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

¿Puedes probar esto?

 const onSellChange = () => { setFilterState(filterState => ({ ...filterState, "sell": !filterState.sell }) ); } const onBuyChange = () => { setFilterState(filterState => ({ ...filterState, "buy": !filterState.buy }) ); }

No puedo garantizar que funcione, pero parece que el problema tiene que ver con la forma en que se deriva el estado, por lo que hice que sus configuradores recogieran el anterior llamado asíncrono. De esa manera, React debería poder resolverlo correctamente.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Solución

La función set de useState se ejecuta de forma asincrónica, por lo que necesitaba useEffect.
Usando useEffect:

 useEffect(() => { filterEvents(); }, [filterState]);

Con el mismo código que el anterior, esto filtra los eventos que se muestran cada vez que cambia filterState, que es lo que necesitaba. Gracias a Juho Vepsäläinen por la ayuda.

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