javascript - 如何正确处理 React Native Navigation 中的模糊和焦点?
问题描述
我在一个由 2 个选项卡组成的 React Native 应用程序中有一个屏幕。每次我切换选项卡时,我都想与我的服务器启动轮询操作以获取选项卡的内容。我通过这样做来实现这一目标:
const [pollingId, setPollingId] = useState<number>(0);
useEffect(() => {
clearInterval(pollingId);
setPollingId(window.setInterval(() => loadList(activeTab), 60000));
}, [activeTab]);
这很好用。
当我在另一个屏幕上导航时,问题就开始了:我想要做的是:
- 停止投票(无论是什么)
- 导航到第二个屏幕
- 当我返回 2 个选项卡屏幕时,必须重新启动轮询
但是当我这样做的时候navigation.navigate("Screen2")
,第一个屏幕没有被卸载,所以我不能把它放在clearInterval(pollingId)
返回useEffect
函数中。
我试图通过执行以下操作来使用 React Navigation 的模糊和焦点事件:
const subscribe = () => {
navigation.addListener('focus', () => {
console.debug('focus');
setPollingId(window.setInterval(() => loadList(activeTab), 60000));
});
};
const unsubscribe = () => {
navigation.addListener('blur', () => {
console.debug('blur');
clearInterval(pollingId);
});
};
但是,如果我继续前进和后退,这会导致事件相互叠加。做我无法做的事情的最佳做法是什么?
解决方案
推荐阅读
- java - 在 RxJavaFx 中,如何获取场景加速器事件的 Observable?
- azure - 我可以为 Azure 事件网格域主题创建监视警报吗?
- php - PHP 访问页面内的 DOM
- c# - IsHitTestVisible=false 正在禁用 DataGrid 的 ScrollBar
- html - Flutter 中是否会有来自本地资产 html 文件的离线 webview?
- google-cloud-platform - Google Cloud 平台中的免费套餐
- mysql - 我做错了什么?当我单击修改以更新表中的行时,没有任何改变
- php - PHP 代码在发布之前不会验证验证码
- excel - 如何在excel中匹配包含特定文本和颜色代码的单元格
- javascript - JQuery AJAX 上传文件不适用于超过 10 MB 的文件