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

135
Vistas
¿Qué enlace React usar para que vuelva a representar la lista cada vez que se llama a la función?

Tengo un estado de uso de la siguiente manera:

 const [drivers, setDrivers] = useState(useSelector(selectFilteredDrivers));

Aquí, los controladores son una matriz que podemos mapear.

Tengo una función de clasificación que ordena la lista de controladores:

 const sortDrivers = useCallback( (sortBy: string) => { const sortFunction = ( a: DeliveryDriver, b: DeliveryDriver, sort: string, ) => { if (sortBy === 'desc') { return Number(a.isAvailable) - Number(b.isAvailable); } else { return Number(b.isAvailable) - Number(a.isAvailable); } }; const sortedListOfDrivers = drivers.sort((a, b) => sortFunction(a, b, sortBy), ); console.log('sortedList', sortedListOfDrivers); setDrivers(sortedListOfDrivers); }, [drivers], );

Como puede ver, ordeno la lista y configuro la lista en sortedListOfDrivers. A continuación, mapeo a través de la lista de controladores para devolver el componente del controlador para cada controlador:

 const rows = drivers.map(driver => ( <Driver driver={driver} key={driver.driverId} handleRowOnClick={driverDetailClickHandler} />

));

Si se está preguntando, las filas son algo que paso al componente Table como apoyo.

 render ( <Table headers={headers} rows={rows} /> )

La función se transmite como una devolución de llamada y se adjunta a onClick.
Cuando los controladores de console.log después de la clasificación, muestran que la matriz de controladores se actualiza en consecuencia después de hacer clic, por lo que la funcionalidad de clasificación funciona muy bien detrás de escena.

El problema es que en la interfaz de usuario, mi lista sigue siendo la misma (como antes de ordenar) y no vuelve a representar la lista para ordenarla después del clic.

NOTA: No estoy seguro de si tiene algo que ver con el problema, pero por algún motivo, la interfaz de usuario se actualiza para mostrar una lista ordenada cuando empiezo a escribir algo en el campo de entrada que no tiene nada que ver con la función de clasificación.

¿Cómo hago para que actualice la lista de controladores cuando se ejecuta la función (se hace clic en el botón)?

Intenté colocar mi parte de mapeo en useEffect(). No funcionó.

Cualquier sugerencia es apreciada.

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

0

Array.prototype.sort()

El método sort() ordena los elementos de una matriz en su lugar y devuelve la matriz ordenada. El orden de clasificación predeterminado es ascendente, basado en convertir los elementos en cadenas y luego comparar sus secuencias de valores de unidades de código UTF-16.

Significa que sortedListOfDrivers === drivers es true y setDrivers piensa que nada cambió. Debe crear una nueva matriz para evitar eso:

 setDrivers([...sortedListOfDrivers]);

Nota: drivers.sort cambia la variable sin notificar reaccionar. Por lo tanto, no actualiza su interfaz de usuario hasta que algo más activa una nueva representación.

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