使用React中的上下文API时,是否可以每隔几秒钟设置一次自动刷新间隔?getData()函数在API上运行axios.get(),但当我在useEffect钩子的返回函数中尝试setInterval()和cleanup时,它仍然不会清理间隔。getData()将当前变量和加载变量设置为应用程序级状态。
我只是想每隔几秒钟刷新并重新执行API调用。我尝试使用useRef()钩子,并使它开始工作,但一旦完成,useffect仍然无法清除间隔。
我想访问组件返回函数中的当前属性,并在每次运行API调用时显示一些数据。
代码如下:
const { loading, current, getData } = appContext;
useEffect(() => {
const interval = setInterval(() => {
getData();
console.log('updated');
}, 1000);
return () => clearInterval(interval);
}, []); // eslint-disable-line // also tried without the []
getData()代码:
const getData = async () => {
setLoading();
const res = await axios.get(process.env.REACT_APP_APIT);
dispatch({ type: GET_CURRENT, payload: res.data });
};
我有一个类似的问题,我使用这里描述的解决方案:https://overreacted.io/making-setinterval-declarative-with-react-hooks/
下面是一个简单的例子:
import React, { useEffect, useRef, useState } from "react";
import ReactDOM from "react-dom";
import "./styles.css";
const useInterval = (callback, delay) => {
const savedCallback = useRef();
// Remember the latest callback.
useEffect(() => {
savedCallback.current = callback;
}, [callback]);
// Set up the interval.
useEffect(() => {
function tick() {
savedCallback.current();
}
if (delay !== null) {
let id = setInterval(tick, delay);
return () => clearInterval(id);
}
}, [delay]);
}
function App() {
const [intervalTime, setIntervalTime] = useState(2000);
useInterval(() => {
// Do some API call here
setTimeout(() => {
console.log('API call');
}, 500);
}, intervalTime);
return (
<div className="App">
<button onClick={() => setIntervalTime(2000)}>Set interval to 2 seconds</button>
<button onClick={() => setIntervalTime(null)}>Stop interval</button>
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
使用状态变量intervalTime
可以控制间隔时间。通过将其设置为null,间隔将停止运行。
问题内容: 我在Django中的应用程序 可以 创建一些 非常大的SQL查询。我目前使用一个对象,作为我需要的数据,然后使用一个,以返回要显示给用户的内容。 显然,我可以让用户等待一分钟,同时正在执行这些许多查询集并从数据库中提取查询,然后返回此单一HTML页面。 理想情况下,我想在需要时更新页面,例如: 这可能吗? 问题答案: 我最近发现HttpResponse可以是生成器: 这将逐步将结果返回
问题内容: 我想尝试通过以下方式使用@Schedule批注: 根据日志,CronService运行良好,但是计划的任务“ runsEveryMinute”不起作用。 使用EJB计划任务如何工作? 问题答案: 按照该Javadoc中的注释,默认值是: 除小时,分钟和秒外的所有字段;和 默认情况下为小时,分钟和秒。 通过将小时值保留为默认值,它要求计时器在午夜之后每分钟运行一小时(即00:00、00:
问题内容: 我正在cronjob中运行PHP脚本,我想每5分钟发送一封电子邮件 我当前的(crontab)cronjob: cronmail.php如下: 但是我没有在30分钟内收到此配置的电子邮件。 问题答案: 在文件中,这些字段是: 每小时的分钟。 一天中的小时。 一个月中的某天。 一年中的月份。 一周中的天。 所以: 表示每小时10分钟执行一次。 如果您希望每五分钟使用一次,请使用以下任一方
问题内容: 如何每分钟运行一个函数?在JavaScript中,我可以做类似的事情,在Swift中是否存在类似的事情? 想要的输出: 你好世界每分钟一次… 问题答案: 记住要导入基金会。 斯威夫特4:
问题内容: 我有一个ajax调用到一个php文件。我正在收到结果。现在,我正在研究是否有可能使ajax请求每1秒自动执行一次。我将结果发布到名为的输入字段中。如何每三秒钟执行一次ajax调用而不必调用该函数? 问题答案: 您可能要考虑的是服务器发送事件(SSE) 这是一种HTML5技术,JavaScript可以通过该技术“ 长期轮询 ”服务器端点(您的PHP文件)以查看是否发生了任何更改。长轮询基
我有一个定制的Apache Camel组件,它由一个从DefaultConsumer扩展而来的Consumer和没有Producer组成。 我有一个Spring Boot应用程序,与其他几个骆驼路线,都工作得很好。 这在第一次工作,但当下一次触发作业时,它会尝试启动已经运行的路由。 我希望避免修改自定义组件以从DefaultScheduledPollConsumer扩展,因为它并不总是按计划使用。