Editado para agregar todo el gancho.
El siguiente código está dentro de un gancho personalizado. Cuando llamo al enlace personalizado, aparece un TypeError no capturado que me dice que la función de flecha no es una función. ¿Alguien podría explicar qué hice mal y cuál sería la forma correcta de manejar esto?
const useHook = ({ Id, }) => { let Data = {}; arrowFunction(Id); //calling the arrow function a couple lines below const arrowFunction = (Id) => { const lakeHook = useLake(); if (Id) Data = lakeHook.getReference(Id); if (Data.active){ console.log('data', Data); return Data; } } }Las variables declaradas con let y const también se elevan pero, a diferencia de var, no se inicializan con un valor predeterminado. Se lanzará una excepción si se lee una variable declarada con let o const antes de que se inicialice.
Documentos: https://developer.mozilla.org/en-US/docs/Glossary/Hoisting?retiredLocale=it
Está tratando de leer la función almacenada en const arrowFunction, pero eso no es algo permitido debido a cómo funciona en javascript con variables const. Entonces, lo que debe hacer para llamar a la función antes de la declaración es declararla con la palabra clave adecuada:
arrowFunction(Id); function arrowFunction(Id){ //logic }O, alternativamente, llame a la función después de crearla
const arrowFunction = (Id) => { //logic } arrowFunction(Id); const useHook = ({ Id, }) => { const lakeHook = useLake(); // hooks should be called only on top level let Data = {}; const arrowFunction = (Id) => { if (Id) Data = lakeHook.getReference(Id); if (Data.active){ console.log('data', Data); return Data; } } arrowFunction(Id); //calling the arrow function a couple lines below return ??? // declare return statement (optional); }