javascript - 组件卸载时停止 setInterval()?(反应)
问题描述
当我网站上的用户更改页面时,我希望停止间隔函数。我在网上搜索了“如何判断一个反应元素是否在屏幕上可见”,但我只能找到交叉路口观察者的结果。有没有办法在反应组件卸载时停止间隔函数?(ps。我相信卸载是组件不再渲染的时候?)
这是我的组件间隔:
useEffect(() => {
const updatePostInfo =
inView &&
setInterval(() => {
dispatch(getPostInfo(data._id));
}, 3500);
!inView && clearInterval(updatePostInfo);
}, [inView]);
目前,我已经为它设置了一个交叉点观察器,这样它就不会在它不可见时调度该函数。但是当页面发生变化时,间隔仍然运行?
解决方案
您需要从效果中返回一个清理函数:
useEffect(() => {
const updatePostInfo = setInterval(() => {
dispatch(getPostInfo(data._id));
}, 3500);
return () => clearInterval(updatePostInfo);
}, []);
推荐阅读
- r - 在模块服务器函数中访问闪亮的模块 ID
- php - 为什么我收到此错误“未捕获的异常 'Firebase\JWT\SignatureInvalidException' 并带有消息'签名验证失败'”
- google-apps-script - 特定电子邮件的 GmailApp 或强制使用已登录的电子邮件?
- netlogo - 创建一个新项目并将其添加到我的邻居列表中
- javascript - 使用 Set 将对象的值数组减少为不重复的数组
- java - ToolProvider.getSystemJavaCompiler() --- 它返回什么,什么时候起作用?
- sql - SQL (String+Int) 变量插入循环
- flutter - Flutter 将两个文本在开头垂直对齐
- c# - 参数组合无效或不完整。\r\n参数名称: tagObject VSTS Git API
- facebook-graph-api - 视频允许页面交叉发布需要在实时模式下获得 publish_pages 权限