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

190
Vistas
¿Cómo evitar repetir el trabajo (o mantener el estado común/compartido) en ganchos anidados?

En un enlace anidado: ¿cómo se puede saber si ya se invocó en el componente actual (instancia) y acceder a los valores calculados/guardados previamente?

Preferiblemente sin que el autor del Component /el usuario del enlace tenga que saber sobre esto y no tenga que hacer nada especial para que funcione.

Ejemplo

Un ejemplo para ilustrar el problema:

 const useNestedHook = () => { // Some heavy work with the same result for each component instance. // Is it possible to remember the result of this work when // this hook is used again in the same component instance? // So I would like to save a state which all uses of useNestedHook // could access as long as they are in the same component instance. } const useHookA = () => { useNestedHook(); }; const useHookB = () => { useNestedHook(); }; const Component = () => { useHookA(); // Would like to avoid useNestedHook repeating its work since it's // used in the same component and would have this same result (per definition) // Preferably without the Component author having to know anything about this. useHookB(); };

solución imaginada

Algo así como un estado compartido "con nombre", que daría acceso al mismo estado compartido (en la misma instancia de componente) sin importar en qué enlace se use. Cada instancia de componente tiene su propio estado separado como de costumbre. Tal vez algo como:

 const [state, setState] = useSharedState("stateId", initialValue);
about 4 years ago · Santiago Gelvez
1 Respuestas
Responde la pregunta

0

No, eso no es posible. Cada llamada a useState() siempre estará separada de otras llamadas a useState() .

El componente no puede usar los ganchos como en su ejemplo, pero el autor del componente no necesariamente tiene que preocuparse por los detalles de implementación.

Una solución dependería del caso de uso.

Algunos detalles:

Un estado se define por el lugar en el que se escribe la llamada useState() en el código (consulte la explicación ), que no está directamente relacionado con la instancia. Es decir, dos llamadas useState() y dos instancias son 4 valores de estado.

Puede usar el estado compartido, por ejemplo, usando context , pero luego el estado también sería compartido por todas las instancias, no solo los ganchos (que no desea).

Por lo tanto useNestedHook() siempre estará "separado", pero si puede usar el estado compartido y solo le importa el "almacenamiento en caché" , y puede aceptar que useNestedHook() se llame dos veces (es decir, omita la costosa operación si el resultado es lo mismo), entonces puede usar useEffect() . Es decir, la llamada dependería del valor , no de la instancia ni del gancho.

Algunos ejemplos:

1. Un gancho con opciones

Por ejemplo, si sus ganchos A y B calcularan opcionalmente dos valores diferentes, que necesitan el mismo valor useNestedHook() , podría crear un gancho con opciones en su lugar, por ejemplo:

 const useHookAB = ({ A, B }) => { const expensiveValue = useNestedHook(); if( A ){ /* do what useHookA() was doing */ } if( B ){ /* do what useHookB() was doing */ } }; const Component = () => { useHookAB({ A: true, B: true }); };

No puedo imaginar otra razón en este momento por la que querrías llamar a los anzuelos de esa manera.

2. La forma "normal"

La solución obvia sería:

 const useHookA = ( value ) => { // ... }; const useHookB = ( value ) => { // ... }; const Component = () => { const value = useNestedHook(); useHookA( value ); useHookB( value ); };

Pero puedo imaginar razones por las que no puedes (o no te gusta) hacerlo de esa manera.

about 4 years ago · Santiago Gelvez 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