修复React中的 "Uncaught TypeError: destroy is not a function"错误

821 阅读1分钟

这个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');
  };
});

这就是它的全部内容!这不是一个最直观的错误,但却是一个快速而简单的修复。祝您好运!