众所周知,规则是:
仅在顶层调用挂钩。不要在循环、条件或嵌套函数中调用 Hook。
所以我的问题是如何使用和设计昂贵的自定义挂钩?
鉴于这个钩子:
const useExpensiveHook = () => {
// some code that uses other built-in hooks...
const value = computeExpensiveValue();
// some more code....
return value;
}
如果该规则不存在,我的客户端代码将是:
const myComponent = ({isSuperFeatureEnabled}) => {
let value;
if (isSuperFeatureEnabled){
value = useExpensiveHook();
}
return <div>{value}</div>;
}
我想出的解决方案是让钩子知道它应该退出,像这样,使用一个标志:
const useExpensiveHook = ({enabled}) => {
// some code that uses other built-in hooks...
let value;
if(enabled) {
value = computeExpensiveValue();
}
else {
value = undefined;
}
// some more code....
return value;
};
和客户端代码:
const myComponent = ({isSuperFeatureEnabled}) => {
const value = useExpensiveHook({enabled : isSuperFeatureEnabled});
return <div>{value}</div>;
}
将标志传递给昂贵的钩子是处理条件钩子的正确方法吗?其他选项是什么?