React报错修复:“Uncaught TypeError: destroy is not a function”

报错:Uncaught TypeError: destroy is not a function at commitHookEffectListUnmount

如果你在useEffect函数中使用了async,运行后会出现该报错。

原理解析:

要知道,useEffect 钩子函数的一个特性是清理功能,即return函数。如果你从 useEffect 钩子函数返回任何东西,它必须是一个清理函数,此函数将在组件卸载时运行。相当于类组件中的 componentWillUnmount 生命周期方法。

在 JavaScript 中, async...await 会让程序在等待异步任务完成后才会继续执行。 异步函数也总是返回一个 Promise;如果函数还没有返回,则返回值会自动包装在 Promise 中。

那么我们要是这么写(错误示范),箭头函数直接指向就是返回值,就相当于是返回了一个promise函数了:

复制代码
const myFunc = async()=>{...};
useEffect(()=>myFunc(),[])

正确写法,在用箭头函数时加个花括号,什么都不返回:

复制代码
const myFunc = async()=>{...};
useEffect(()=>{ 
	myFunc();
},[])

修改后程序可正常执行。

相关推荐
GISer_Jing35 分钟前
React手撕组件和Hooks总结
前端·react.js·前端框架
Warren985 小时前
Lua 脚本在 Redis 中的应用
java·前端·网络·vue.js·redis·junit·lua
mCell5 小时前
JavaScript 运行机制详解:再谈 Event Loop
前端·javascript·浏览器
amy_jork7 小时前
npm删除包
开发语言·javascript·ecmascript
帧栈9 小时前
开发避坑指南(27):Vue3中高效安全修改列表元素属性的方法
前端·vue.js
max5006009 小时前
基于桥梁三维模型的无人机检测路径规划系统设计与实现
前端·javascript·python·算法·无人机·easyui
excel9 小时前
使用函数式封装绘制科赫雪花(Koch Snowflake)
前端
我命由我1234510 小时前
软件开发 - 避免过多的 if-else 语句(使用策略模式、使用映射表、使用枚举、使用函数式编程)
java·开发语言·javascript·设计模式·java-ee·策略模式·js
萌萌哒草头将军10 小时前
Node.js v24.6.0 新功能速览 🚀🚀🚀
前端·javascript·node.js
AALoveTouch11 小时前
大麦APP抢票揭秘
javascript