Escribo una aplicación React simple con dos componentes asignados a dos URL:
App.tsx -- foo.tsx it's url is "/foo" -- bar.tsx it's url is "/bar"En App.tsx, tengo un navegador que usa useHistory.push para permitir que el usuario salte entre "/foo" y "/bar". el nombre del usuario se capturará aquí y también se almacenará en un estado Redux.
En foo.tsx y bar.tsx, son muy parecidos pero cargan diferentes tipos de datos de la API. la estructura del código como:
const user = useSelector((state: RootState) => state.user) useEffect(() => { const api = new Api(); async function getData() { const foo: any = await api.getFoo(user.foo) dispatch(setFooData(foo)) } }, [user.name])Lo que había observado:
const user = useSelector((state: RootState) => state.user) se ejecutó nuevamente, useEffect perdió la dependencia anterior para comparar, por lo que se ignoró la dependencia.O bien, useHistory.push simplemente funciona de tal manera, cuando una URL ingresa en el historial, hará que useEffect se ejecute de inmediato sin importar cómo.
Estoy haciendo esta pregunta porque recordé que useEffect no se invocará cuando salte de otra URL, pero en ese momento comencé a usar reaccionar y no estoy seguro de cómo lo hice, y el historial de git había sido abrumado por mi numerosos compromisos :(
Para resumir, lo que quiero hacer es: cuando accedo a /foo, todos los datos se cargan y el estado de redux está listo; mismo proceso cuando accedo a otra url/bar. useEffect no se invoca cuando vuelvo a /foo desde /bar, a menos que envíe un nuevo nombre de usuario. tiene la intención de reducir las solicitudes a la API ya que ya había usado la tienda Redux para administrar los datos del usuario. Otra razón es que puedo darme cuenta de que mi comprensión sobre useHistory, useEffect y Redux es correcta.
¡Gracias!