javascript - 使用 React Hooks 在 React Native 中按设定的时间间隔自动刷新 JSON 数据
问题描述
我正在为一个广播电台开发一个 React Native 应用程序,它显示来自 JSON url 的歌曲和艺术家信息。如何获取每分钟左右更新/获取的信息?我尝试了一些使用 setInterval 的变体,但似乎无法让它在我的功能组件中工作。我猜这是因为我试图将 setInterval 与异步函数一起使用..?提前致谢!
const [track, setTrack] = useState({});
async function fetchData() {
const res = await fetch(" my API url ");
res
.json()
.then(res => setTrack(res.data[0].track.title))
.catch(err => setErrors(err));
}
useEffect(() => {
fetchData();
});
<Text>{track}</Text>
解决方案
您可以setTimeout
在第一个组件挂载后每隔 N 时间请求一次,例如:
import React from 'react';
const Component = () => {
const [track, setTrack] = React.useState('');
React.useEffect(() => {
let repeat;
async function fetchData() {
try {
const res = await fetch(" my API url ");
const json = await res.json();
setTrack(json.data[0].track.title);
repeat = setTimeout(fetchData, 60000); // request again after a minute
} catch (error) {
console.error(error.message)
}
}
fetchData();
return () => {
if (repeat) {
clearTimeout(repeat);
}
}
}, []);
return (
<Text>{track}</Text>
);
};
推荐阅读
- unity3d - unity export to 64bit apk 会导致游戏延迟
- azure - 如何使用 Terraform 为 Ansible 播种 SSH 密钥?
- graphviz - 有没有办法在graphviz中将箭头从标记/单词添加到另一个?
- jquery - 从 blazorCoreHosted Applicatiom 中的 html 注册页面成功注册后如何进入启动页面
- php - 我需要为默认时间 PHP 添加额外的 24 小时
- reactjs - 使用 react-router-dom 重定向后浏览器后退按钮未获取历史记录
- google-chrome - 视频不在 Chrome 中播放(但在 Firefox 中播放)
- google-apps-script - 改进自动将上传的 CSV 或 XLS 文件中的数据导入 Google 表格的代码
- perl - 处理 Perl 子例程的多个参数
- laravel - 未定义的变量:变量不会在另一个页面中传递