Javascript 如何从应用程序中的多个位置调用clearInterval?

Javascript 如何从应用程序中的多个位置调用clearInterval?,javascript,reactjs,react-native,setinterval,Javascript,Reactjs,React Native,Setinterval,我有一个倒计时计时器,我需要在我的React本机应用程序中的多个位置重置它。我有一个服务函数,返回我更新的时间字符串和一个变量,setInterval函数通过回调returnCountDown和returnSetInterval保存到该变量: export const getCountdown=(callLength、returnCountDown、returnSetInterval)=>{ 让callLengthInMs=Date.parse('1970-01-01T00:'+callLeng

我有一个倒计时计时器,我需要在我的React本机应用程序中的多个位置重置它。我有一个服务函数,返回我更新的时间字符串和一个变量,
setInterval
函数通过回调
returnCountDown
returnSetInterval
保存到该变量:

export const getCountdown=(callLength、returnCountDown、returnSetInterval)=>{
让callLengthInMs=Date.parse('1970-01-01T00:'+callLength+'Z')
const interval=setInterval(()=>parseTimeString(),1000,返回倒计时)
const parseTimeString=()=>{
callLengthInMs-=1000;
const timeLeft=新日期(callLengthInMs).toISOString().slice(14,-5)
返回倒计时(timeLeft);
}
returnSetInterval(interval);
}
然后在我的函数组件中,我将返回的
setInterval
函数保存为state,并在特定条件下调用它,但是
clearInterval
不起作用:

const倒计时=()=>{
const[time,setTime]=useState(null);
常量[callInterval,setCallInterval]=useState(null);
const callLength=useSelector(state=>state.videosession.callLength);
useffect(()=>{
getCountdown(callLength、returnCountDown、returnSetInterval);
}, []);
const returnCountDown=timeLeft=>{
设置时间(timeLeft);
}
const returnSetInterval=interval=>{
setCallInterval(间隔)
}
时间=='00:05'&&console.log('00:05 HIT')&&clearInterval(callInterval);//不起作用。
如果这不是正确的方法,如何通过导出的模块调用
clearInterval

更新
当我
console.log(typeof interval)
时,我得到
number
。这是分配给
setInterval
的变量,如果它只有一个组件


ComponentDidMount=()=>{
 this.interval = setInterval(()=>{}, 1000);
}

ComponentWillUnmount=()=>{
clearInterval(this.interval)
}


如果它不仅仅是一个组件,那么您可能需要使用redux,允许通过应用程序中的任何组件访问其全局状态,这样您就可以将间隔分配给全局状态,并在应用程序中的任何位置使用该状态。

您当前的问题是,它将始终返回
未定义的
(它没有返回值).意思是:

将在调用
console.log()之后执行

改用if语句:

if (time === '00:05') {
  console.log('00:05 HIT');
  clearInterval(callInterval);
}
或者,您可以使用,但是我建议坚持使用if语句以提高可读性

time === '00:05' && (console.log('00:05 HIT'), clearInterval(callInterval));
true&&console.log(“a”)和&console.log(“b”);
false&&console.log(“c”)和&console.log(“d”);
如果(真){
控制台日志(“e”);
控制台日志(“f”);
}
if(false){
控制台日志(“g”);
控制台日志(“h”);
}
true&(console.log(“i”)、console.log(“j”);

false&&(console.log(“k”)、console.log(“l”);
将间隔引用置于您的状态,而不是局部变量,可以通过调用调用
clearInterval()的操作来控制它
关于state变量。谢谢@JaredFarrish-我正在将变量
interval
放入state中-你能给我解释一下你的意思吗?我不熟悉React本身,但在Vue中,你会将引用存储在一个可以从多个地方(state)访问的地方。然后,您将执行一个调度以进行更改的变异,和/或一个将其提交到状态的操作(在Vuex下)。好的,是的,我已经将其存储到状态。第二部分是创建一个特定的状态修饰符(操作或变异),该修饰符实际调用该状态变量上的
clearInterval()
(并将其设置为null或诸如此类)。然后您可以从任何地方调用该状态修饰符。
time === '00:05' && (console.log('00:05 HIT'), clearInterval(callInterval));