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

369
Vistas
Reaccionar: ¿obtener datos en el padre o dentro de sus hijos?

Nota: no estoy usando Redux (solo Context + Hooks)

Introducción

Tengo una pantalla " Perfil ", que representa un TabView .

Este TabView representa dos componentes como escenas:

  1. Publicaciones de usuario
  2. Informacion del usuario

La pantalla Mi perfil obtiene los datos del usuario de mi base de datos, ya que tiene que generar algunas cosas que dependen de estos datos.

Además, se transmite a través de accesorios a mi componente " Información de usuario", ya que solo representa los datos del usuario. Entonces... no hay obtención de datos en mi componente " Información de usuario".

Por otro lado, mi componente " UserPosts " es responsable de buscar las publicaciones de los usuarios, ya que genera un componente " UserPostsGrid " que representa esas publicaciones con paginación (Lista plana sin fin).

Nota: La obtención de datos se realiza en ganchos personalizados, no directamente dentro del componente (además, esos ganchos administran los datos con estado respectivos).

Problema

El principal problema surge cuando necesito actualizar los datos del usuario y el usuario publica cuando el usuario tira para actualizar dentro de la pantalla " Perfil ".

No hay problema para que esta pantalla obtenga los datos del usuario, como he dicho antes, la pantalla " Perfil " es responsable de esa acción.

Pero las publicaciones son los datos con estado de mi hijo...

¿Soluciones múltiples?

He pensado en resolver este problema usando la solución actual:

 React.forwardRef() + React.useImperativeHandle()

Con esto, podré pasar una referencia a mis " UserPosts " y usar la programación imperativa para acceder al método de obtención de datos: userPostsRef.current.refreshPosts();

Nunca he visto otros escenarios para resolver este problema como este, pero debería funcionar. En cambio, otros codificadores implementan un ContextProvider para manejar todos los datos y poder acceder a ellos donde quieran. El principal problema que noto aquí es: memoización adicional + renderizaciones adicionales.

Otra solución podría ser implementar toda la obtención de datos dentro del padre y pasar las respectivas devoluciones de llamada a través de accesorios al hijo. El principal problema que noto aquí es que estamos creando algún tipo de "Componente de Dios" y es posible que tengamos varias líneas de código...

Mi pregunta

¿Es un antipatrón o una mala práctica implementar la primera solución ?

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

0

Para responder tu pregunta:

Sí, es un antipatrón en React , porque React se basa en la idea de que usted especifica el estado de su aplicación y luego deja que React represente los componentes dependiendo de este estado dado.

Si algo debe cambiar, se supone que debe especificar un nuevo estado que represente la diferencia con el estado anterior.

Las referencias solo deben usarse si no hay otra opción. Básicamente, si usa Refs, dice "No quiero usar React para esta parte específica de mi código".

Como siempre, el código imperativo que usa referencias debe evitarse en la mayoría de los casos.

Para usar estado en lugar de comandos:

Abordaría este tipo de problema tratando de traducir la acción imperativa en algún estado de información .

  • El usuario dice "consígueme los últimos datos", eso es un comando, es decir, imperativo .
  • Ahora preguntaría "¿qué me está diciendo el usuario sobre el estado de los datos en este momento?"
  • Una respuesta sería "estos datos ya no están actualizados", y esto puede expresarse como un estado y transmitirse a través de accesorios.

Una solución para su problema:

Por ejemplo, puede usar un accesorio needsUpdate , que se establece en true cuando los datos deben actualizarse y en false cuando se recuperan.

Para evitar representaciones innecesarias (la configuración de needsUpdate = false causaría otra llamada de, por ejemplo, useEffect, incluso si no sucede nada allí), probablemente usaría un accesorio de componente secundario como latestUpdateRequest y un estado secundario como latestUpdate que contiene un contador o una marca de tiempo, y luego comparar if(latestUpdateRequest > latestUpdate) .

Para informar al padre sobre el cambio, simplemente pase una función de devolución de llamada como dataUpdated() como apoyo.

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