如何检测传递的函数是否为React Hook函数?

isHook(useState); // return true
isHook(() => {}); // return false;


我需要知道附加到对象属性的函数是否为钩子。如果它是另一个函数的“正常函数”,则需要调用该函数。

最佳答案

可以通过将内置挂钩与已知的React挂钩进行比较来识别它们,

[React.useState, React.useReducer, /*...*/].includes(hookFn);


没有办法知道一个函数是否是自定义钩子,即一个在内部调用React内置钩子的函数。

如果某个函数可能是自定义钩子,则应根据hook rules对其进行调用,即在功能组件内部无条件调用。

React custom hooks通常具有use...名称,这样开发人员可以通过视觉识别它们。在客户端应用程序中,切勿使用名称来以编程方式标识它们,因为原始函数name在缩小过程中会丢失,并且可能根本不存在,具体取决于函数的定义方式。

09-20 23:53