得到一个未捕获的TypeError: lake不是一个函数



编辑添加整个钩子

下面的代码是在一个自定义钩子中。当我调用自定义钩子时,我得到一个未捕获的TypeError,告诉我箭头函数不是函数。有人能解释一下我做错了什么,正确的处理方法是什么吗?

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;
}
}
}

用let和const声明的变量也被提升,但与var不同的是,它们不使用默认值初始化。如果用let或const声明的变量在初始化之前被读取,将引发异常。

文档:https://developer.mozilla.org/en-US/docs/Glossary/Hoisting?retiredLocale=it

您正在尝试读取存储在const arrowFunction中的函数但这是不允许的,因为它是如何在javascript中提升与const变量。因此,在声明之前调用函数需要做的是使用合适的关键字声明它:

arrowFunction(Id);
function arrowFunction(Id){
//logic
}

或者在创建函数后调用它

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);
}

  1. 函数表达式不被提升。使用函数声明代替。
  2. lakeHook应该根据hooks的规则被移到顶层。你可能想要自定义的useHook返回一些东西,所以声明return语句。(可选)

相关内容

  • 没有找到相关文章

最新更新