Javascript SetInterval正在渲染函数中同时调用5次

Javascript SetInterval正在渲染函数中同时调用5次,javascript,reactjs,react-native,ecmascript-6,background-task,Javascript,Reactjs,React Native,Ecmascript 6,Background Task,我正在使用库react native background timer,我正在后台运行一些任务。实际上这个函数工作得很好,但当我在render方法中控制它时,它会同时启动这个函数5次。我只想打一次电话。有人能帮我解决这个问题吗 import BackgroundTimer from 'react-native-background-timer'; 在渲染方法中: BackgroundTimer.setInterval(() => console.log('@@@@ data has b

我正在使用库
react native background timer
,我正在后台运行一些任务。实际上这个函数工作得很好,但当我在render方法中控制它时,它会同时启动这个函数5次。我只想打一次电话。有人能帮我解决这个问题吗

import BackgroundTimer from 'react-native-background-timer';
在渲染方法中:

 BackgroundTimer.setInterval(() => console.log('@@@@ data has been rendered'), 60000);
 BackgroundTimer.clearInterval(6000)

我不熟悉这个特定的库,但通常会将一个ID带到应该清除的库,并返回一个ID

 const intervalId = BackgroundTimer.setInterval(() => console.log('@@@@ data has been rendered'), 60000);
 BackgroundTimer.clearInterval(intervalHandle);

可能不是用于此的方法,除非您正在使用。考虑使用其他方法。我建议使用()来调用setInterval()和clearInterval()。

我不熟悉这个特定的库,但通常会使用一个应该清除的ID,并返回一个ID

 const intervalId = BackgroundTimer.setInterval(() => console.log('@@@@ data has been rendered'), 60000);
 BackgroundTimer.clearInterval(intervalHandle);

可能不是用于此的方法,除非您正在使用。考虑使用其他方法。我建议使用()来调用setInterval()和clearInterval()。

回答这个评论,我认为这才是真正需要的:

它实际上叫了超过18次?我只想打一次电话(一分钟内)

如果需要在组件加载时运行一次后台任务,则需要选择以下选项之一:

  • 类组件
    componentDidMount()
    生命周期
  • 功能组件
    useffect
    hook
例如:

类组件
A类扩展了React.Component{
componentDidMount(){
常量间隔=设置间隔(()=>{
控制台日志(“运行”);
间隔时间;
}, 60000);
}
render(){
从一个地方回来;
}
}
功能部件
函数B(){
useffect(()=>{
常量间隔=设置间隔(()=>{
控制台日志(“B运行”);
间隔时间;
}, 60000);

},[]);//对评论的回答,我认为这是这里真正需要的:

它实际上叫了18次以上?我只想叫一次(一分钟内)

如果需要在组件加载时运行一次后台任务,则需要选择以下选项之一:

  • 类组件
    componentDidMount()
    生命周期
  • 功能组件
    useffect
    hook
例如:

类组件
A类扩展了React.Component{
componentDidMount(){
常量间隔=设置间隔(()=>{
控制台日志(“运行”);
间隔时间;
}, 60000);
}
render(){
从一个地方回来;
}
}
功能部件
函数B(){
useffect(()=>{
常量间隔=设置间隔(()=>{
控制台日志(“B运行”);
间隔时间;
}, 60000);


},[]);//是否确实需要
setInterval
而不是
setTimeout
?另外,调用渲染的时间是多少?每次渲染时都会重新初始化此设置phase@Itamar它实际上叫了18次以上?我只想叫一次(一分钟内)查看下面的我的答案找到你的答案了吗?你确定你需要
setInterval
而不是
setTimeout
?另外,调用渲染的时间有多长?每次渲染时都会重新初始化phase@Itamar它实际上叫了18次以上?我只想叫一次(一分钟内)查看下面的我的答案找到你的答案了吗?这几乎肯定是问题所在。文档显示了这种用法我只是编辑我的代码,而不是启动console.log 18次[Wed Sep 16 2020 01:49:43.566]log@@@data已经呈现[Wed Sep 16 2020 01:49:43.568]log@@@data已经呈现每次
render()都会调用它
被调用。@Slbox实际上,我想每1分钟调用一次我的函数,但我想触发一次。现在它同时触发超过18次。这几乎可以肯定是问题所在。文档显示了这种用法。我只是编辑我的代码,而不是它触发控制台。日志18次[Wed Sep 16 2020 01:49:43.566]日志@@@data已呈现[Wed Sep 16 2020 01:49:43.568]LOG@@@data已渲染每次调用
render()
时都会调用它。@实际上,我想每1分钟调用一次我的函数,但我想触发一次。现在它同时触发超过18次。