【发布时间】:2019-10-19 21:46:16
【问题描述】:
我收到此错误:
无法对未安装的组件执行 React 状态更新。这是 无操作,但它表明您的应用程序中存在内存泄漏。修理, 在 useEffect 清理中取消所有订阅和异步任务 功能。
当开始获取数据并卸载组件时,函数正在尝试更新卸载组件的状态。
解决此问题的最佳方法是什么?
default function Test() {
const [notSeenAmount, setNotSeenAmount] = useState(false)
useEffect(() => {
let timer = setInterval(updateNotSeenAmount, 2000)
return () => clearInterval(timer)
}, [])
async function updateNotSeenAmount() {
let data // here i fetch data
setNotSeenAmount(data) // here is problem. If component was unmounted, i get error.
}
async function anotherFunction() {
updateNotSeenAmount() //it can trigger update too
}
return <button onClick={updateNotSeenAmount}>Push me</button> //update can be triggered manually
}
【问题讨论】:
-
您的问题可能是您使用的 setInterval 不正确,请删除函数调用:即
updateNotSeenAmount中的updateNotSeenAmount内的()setInterval。 -
@Khauri ye,已修复,但问题仍然存在。
-
我认为在这里使用括号是有问题的 - 你有适当的清理代码来取消超时,所以我认为 remove 正在传递的
[]是安全的到useEffect
标签: reactjs react-hooks