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

277
Visualizações
React Hook useCallback recibió una función cuyas dependencias se desconocen. Pase una función en línea en su lugar

Considere este ejemplo:

 let memoizedCb = React.useCallback( memoize((param) => () => someFunction(param)), [] );

donde memoize es de una biblioteca externa como "memoize rápido". El código anterior da una advertencia:

React Hook useCallback recibió una función cuyas dependencias se desconocen. Pase una función en línea en su lugar

Encontré este hilo que, si nos adaptamos a mi caso de uso, sugeriría esto como solución ( si no me equivoco ):

 const memoizedCb = React.useMemo( () => memoize((param) => () => someFunction(param)), [] );

¿De qué se trata la advertencia? ¿ Por qué useMemo soluciona este problema?

NOTA: someFunction se define fuera del componente de función, por lo que no se necesita como dependencia.

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Parece que la advertencia está ahí porque useCallback (y también useMemo ver más abajo) espera una función en línea como argumento (aunque no sé por qué).

Así que en la solución de la pregunta:

 const memoizedCb = React.useMemo( () => memoize((param) => () => someFunction(param)), [] );

usaron useMemo para imitar la funcionalidad useCallback mientras también pasaban una función en línea a useMemo como la advertencia requerida:

React Hook useCallback recibió una función cuyas dependencias se desconocen. Pase una función en línea en su lugar


Esa advertencia no es específica de useCallback , recibe la misma advertencia si simplemente reemplaza useCallback con useMemo en el primer ejemplo:

 // For testing // Gives same warning let memoizedCb = React.useMemo( memoize((param) => () => someFunction(param)), [] );
about 4 years ago · Juan Pablo Isaza Relatório

0

Hasta donde yo sé, useCallback espera una función en línea. Si pasa una función devuelta desde otra función, eslint no podrá averiguar cuáles son las dependencias de la función, por lo que mostrará esta advertencia.

Aquí creo que eslint no puede determinar las dependencias de somefunction y, por lo tanto, no puede evaluar la regla react-hooks/exhaustive-deps porque para evaluar esta regla, eslint debería poder identificar si existe alguna dependencia como estado, apoyos para la función aprobada para usar el gancho de devolución de llamada. Entonces, eslint le pide que pase una función en línea que comprenderá y puede evaluar para las reglas de pelusa.

about 4 years ago · Juan Pablo Isaza Relatório

0

Como una explicación más general, lo siguiente producirá una advertencia:

 const someFuncWrap = (fn) => (e) => fn(e) const memoizedFunc = useCallback(someFuncWrap(foo), [someFuncWrap, foo]);

Se pasa el cambio de useCallback a useMemo con una función en línea.

 const someFuncWrap = (fn) => (e) => fn(e) const memoizedFunc = useMemo(() => someFuncWrap(foo), [someFuncWrap, foo]);

Esto se debe a que, para analizar el gancho, eslint necesita verlo de la siguiente forma:

 useMemo(() => foo, [foo]); useCallback((bar) => foo(bar), [foo]);
about 4 years ago · Juan Pablo Isaza 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