Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

757
Visualizações
useEffect no llamado en React Native cuando regrese a la pantalla

Cómo estás. Este es el escenario de este problema. Digamos que hay 2 pantallas para hacerlo simple.

  1. entrar en una pantalla. useEffect of Una pantalla llamada.
  2. navegar a la pantalla B desde la pantalla A
  3. navegue de regreso a la pantalla A desde B. en este momento, no se llama a useEffect.

     function CompanyComponent(props) { const [roleID, setRoleID] = useState(props.user.SELECTED_ROLE.id) useEffect(()=>{ // this called only once when A screen(this component) loaded, // but when comeback to this screen, it doesn't called setRoleID(props.user.SELECTED_ROLE.id) }, [props.user]) }

Entonces, el estado actualizado de la pantalla A sigue siendo el mismo cuando regresa a la pantalla A nuevamente (sin cargar desde accesorios)

No estoy cambiando props.user en la pantalla B. Pero creo que const [roleID, setRoleID] = useState(props.user.SELECTED_ROLE.id) esta línea debería llamarse al menos.

Estoy usando redux-persist. Creo que esto no es un problema. Para la navegación, uso esto

 // to go first screen A, screen B function navigate(routeName, params) { _navigator.dispatch( NavigationActions.navigate({ routeName, params, }) ); } // when come back to screen A from B function goBack() { _navigator.dispatch( NavigationActions.back() ); }

¿Hay alguna devolución de llamada que pueda usar cuando aparece la pantalla? ¿Qué está mal con mi código?

Gracias

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

La siguiente solución funcionó para mí:

 import React, { useEffect } from "react"; import { useIsFocused } from "@react-navigation/native"; const ExampleScreen = (props) => { const isFocused = useIsFocused(); useEffect(() => { console.log("called"); // Call only when screen open or when back on screen if(isFocused){ getInitialData(); } }, [props, isFocused]); const getInitialData = async () => {} return ( ...... ...... ) }

He usado reaccionar navegación 5+

@react-navigation/nativo": "5.6.1"

over 4 years ago · Santiago Trujillo Relatório

0

Cuando navega de A a B, el componente A no se destruye (permanece en la pila de navegación). Por lo tanto, cuando navega hacia atrás, el código no se vuelve a ejecutar.

Quizás una mejor manera de lograr lo que desea usar los eventos del ciclo de vida de navegación (supongo que está usando react-navigation ), es decir, suscríbase al evento didFocus y ejecute el código que desee siempre que el componente esté enfocado, por ejemplo.

 const unsubscribe = props.navigation.addListener('didFocus', () => { console.log('focussed'); });

No olvide darse de baja cuando corresponda, por ejemplo

 // sometime later perhaps when the component is unmounted call the function returned from addListener. In this case it was called unsubscribe unsubscribe();
over 4 years ago · Santiago Trujillo Relatório

0

La versión actual de React Navigation proporciona el gancho useFocusEffect. Ver aquí

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda