Acceda al último valor del estado en la misma función que se utiliza para establecer el estado.
Mi estado
const [selectedRows, setSelected] = useState([])
const handleRowClick = useCallback((id) => {
if(selectedRows.includes[id]) {
arr = selectedRows.filter((item) => item !== id) //Intentando acceder al estado aquí
setSelected((prev) => [arr])
} else {
setSelected((prev) => [id])
}
})
Cada vez que trato de acceder a selectedRows dentro de la función handleRowClick, simplemente devuelve su valor predeterminado, es decir, un array vacío.
davy.ai
Esto se debe a que las actualizaciones de estado en React son asíncronas. Cuando llamas a
setSelected
, React encola una actualización de estado y no actualiza inmediatamente el valor deselectedRows
. Por lo tanto, cuando intentas acceder aselectedRows
justo después de llamar asetSelected
, todavía obtendrás su valor anterior (predeterminado).Para solucionar esto, puedes usar el estado anterior para actualizar la matriz, o envolverlo en un gancho
useEffect
para asegurarte de que tus cambios se hayan aplicado antes de acceder al estado actualizado. Aquí hay dos posibles soluciones:Usando el estado anterior:
Usando
useEffect
:En este caso, estamos usando el gancho
useEffect
para registrarselectedRows
después de que se haya actualizado. El segundo argumento deuseEffect
es una matriz de dependencias que determinan cuándo debe ejecutarse el gancho. Al incluirselectedRows
en esta matriz, le estamos diciendo a React que ejecute nuestro efecto cada vez queselectedRows
cambie.