这个React错误看起来特别神秘,但当你掌握了useEffect 钩子的窍门后,就会有很大的意义。
Uncaught TypeError: destroy is not a function
事实证明,这几乎总是发生在你试图从你的useEffect 钩子返回任何不是函数的东西时。例如,你可能正在做这样的事情。
useEffect(() => callSomeAPI());
这和做这样的事情是一样的。
useEffect(() => {
return callSomeAPI();
});
为什么这不起作用?
如果你从useEffect函数中返回任何东西,它必须是一个函数。
快速解决方案
解决这个问题的最快方法是,不从效果中返回任何东西!这几乎肯定是有效的。
useEffect(() => {
callSomeAPI();
});
而且这几乎肯定会起作用。
解释一下。useEffect清理函数
如果你从useEffect 钩子函数返回任何东西,它必须是一个清理函数。这个函数将在组件卸载时运行。这可以被认为是大致相当于类组件中的componentWillUnmount 生命周期方法。
下面是一个例子,useEffect ,返回它被允许返回的东西(一个函数)。此外,如果我们在行动中测试一下,我们会发现,当我们的组件卸载时,文本"This will be logged on unmount" 确实会被记录下来。
useEffect(() => {
callSomeAPI();
return () => {
console.log('This will be logged on unmount');
};
});
这就是它的全部内容!这不是一个最直观的错误,但却是一个快速而简单的修复。祝您好运!