javascript - 使用动态道具卸载时使用 useEffect 挂钩
问题描述
在这里与钩子搏斗。
我在组件中有以下代码:
const {isLoading, abortRequest} = props;
const cleanUp = React.useCallback(() => {
if (isLoading) abortRequest();
}, [isLoading, abortRequest]);
React.useEffect(() => {
return () => {
cleanUp();
};
}, []);
我基本上是在组件卸载时尝试中止 AJAX 请求,并且取消必须仅在 propisloading
设置为 true 时发生(最初它设置为 false 并在第一次发出请求时变为 true)。问题是我props.isLoading
每次都得到一个陈旧的值,因此当组件卸载时它永远不会中止请求。我试图将 cleanUp 函数作为useEffect
挂钩的依赖项包含在内,但这使得它在每次 cleanUp 回调更新时都运行,这不是我想要的。
知道如何解决这个问题吗?
解决方案
useCallback将返回回调的记忆版本,仅当依赖项之一发生更改时才会更改
您根本不需要使用useCallback
钩子:
React.useEffect(() => {
return () => {
if (isLoading) abortRequest();
};
}, [isLoading]);
推荐阅读
- c# - 看不到我的自定义应用事件(Facebook 分析)
- c# - 当值相同时循环不进入
- git - 如何将 git bash 更改为左对齐
- vb.net - 与 Windows 7 相比,Windows 10 中的性能问题
- c# - Arduino 安全地使用 .net Core api?
- java - 如何更改构建多个文件版本?我的应用程序不适用于此问题
- python - UT8 问题 - 有没有办法在 Python 中将奇怪的字符 ä 转换为正确的德语字符 ä?
- .htaccess - htaccess子域url重写不考虑
- java - 从 EditText 字段获取输入并保存在变量中
- python - 在 odoo 11 中的产品表单邮件线程上发布消息