Digamos que le dan una serie de objetos en su estado React, como este:
[ { "id": "…", "title": "Brief history of Space Shuttle program", "date": "2016-10-29 19:00:00+01:00", "venue": "NASA History Museum" }, { "id": "…", "title": "Why did the Challenger explode?", "date": "2016-11-31 18:30:00+01:00", "venue": "Albert II Library Building" } ]Ahora desea ordenar esto por fecha, digamos que tiene un foro o algo similar, donde la primera publicación debe ser la más reciente según la fecha.
¿Cómo lo ordenarías? Este fue mi intento:
function sortExample (dataToSort) { let test = [...dataToSort]; test.sort((a,b) => new Date(a.date) - new Date(b.date) } Desafortunadamente, eso no funcionó del todo bien. Y lo más importante, ¿dónde colocaría esta función? Lo puse en mi useEffect , eso tampoco pareció funcionar para mí.
Tienes dos opciones:
Digamos que tenemos:
const [dataInState, setDataInState] = useState([]);El primero:
useEffect(() => { fetch("/data") .then(res => res.json()) .then(json => setDataInState(json.sort(myCompareFunc)) }, [])Segundo:
Establezca el estado como de costumbre, luego en el cuerpo del componente, antes de regresar:
const sortedData = [...dataInState].sort(myCompareFunc) Ahora puede usar sortedData en JSX o en cualquier otro lugar.
Recomiendo el primero por razones de rendimiento.