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

374
Visualizações
¿Cómo hacer un gancho desde mi código React.js/Next.js?

Intento hacer un gancho a partir de mi código, pero tengo el problema. Mi código del archivo de enlace:

 import { useRouter } from "next/router"; const useCurrentPath = () => { const { asPath, locale, defaultLocale } = useRouter(); if (locale === defaultLocale) return { asPath }; return `/${locale}${asPath}`; }; export default useCurrentPath;

Lugar donde lo llamo

 import { SubHeaderLink, SubHeaderLinks } from "@/components/layout/subHeader/SubHeader"; import { ReactStoryblokComponent, StoryblokLink } from "@/types/storyblok"; import { useStoryblokLinkParser } from "storyblok/useStoryblokLinkParser"; import useCurrentPath from "hooks/useCurrentPath"; type Blok = { subHeaderLinks: { _uid: string; linkName: string; href: StoryblokLink }[]; }; const StoryblokSubHeader: ReactStoryblokComponent<Blok> = ({ blok: { subHeaderLinks }, }) => { const { getHref } = useStoryblokLinkParser(); const getCurrentPath = useCurrentPath(); return ( <SubHeaderLinks> {subHeaderLinks.map(({ _uid, href, linkName }) => ( <SubHeaderLink key={_uid} href={getHref(href)} name={linkName} isActive={ getCurrentPath() === getHref(href)} /> ))} )) </SubHeaderLinks> ); }; export default StoryblokSubHeader;

en la fila

 isActive={ getCurrentPath() === getHref(href)}

Recibí el problema "Esta expresión no se puede llamar. No se puede llamar a ningún componente del tipo 'string | { asPath: string; }'".

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

0

const { asPath, locale, defaultLocale } = useRouter(); if (locale === defaultLocale) return { asPath };

Está desestructurando asPath desde useRouter(); en la primera línea, pero luego lo devuelves dentro de un objeto en la segunda.

probar:

 const { asPath, locale, defaultLocale } = useRouter(); if (locale === defaultLocale) return asPath;

Su función debería devolver una cadena independientemente de entonces.

about 4 years ago · Juan Pablo Isaza Relatório

0

La siguiente línea:

 const getCurrentPath = useCurrentPath();

asigna el resultado de llamar a useCurrentPath a la constante getCurrentPath . Ese resultado, basado en tu enlace, es una string o un objeto de tipo { asPath: string } .

Ese resultado no es una función y, por lo tanto, no se puede llamar. Y lo está llamando dentro de JSX, en el atributo isActive de <SubHeaderLink /> ).

Probablemente quisiste decir:

 const getCurrentPath = useCurrentPath

, porque se puede llamar a useCurrentPath . O alternativamente:

 const getCurrentPath = () => useCurrentPath()

Otro problema es el hecho mismo de que no siempre devuelve una string de su gancho personalizado.
Creo que deberías reemplazar return { asPath } con return asPath , dentro de tu enlace, para que el enlace siempre devuelva una string , que es, muy probablemente, lo que quieres.

about 4 years ago · Juan Pablo Isaza Relatório

0

El problema es que está devolviendo una cadena/objeto de su enlace y luego intenta invocarlo como una función.

Cambios menores, sugeriría:

  1. Deberías devolver una cuerda de tu gancho. Devuelve asPath en lugar de un objeto.
 import { useRouter } from "next/router"; const useCurrentPath = () => { const { asPath, locale, defaultLocale } = useRouter(); if (locale === defaultLocale) return asPath; return `/${locale}${asPath}`; }; export default useCurrentPath;
  1. Use la cadena directamente en lugar de intentar invocar un objeto/cadena, que es lo que causa el error.
 <SubHeaderLink key={_uid} href={getHref(href)} name={linkName} isActive={ getCurrentPath === getHref(href)} />
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