首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何清除另一个函数中的setTimer

如何清除另一个函数中的setTimer
EN

Stack Overflow用户
提问于 2019-10-02 21:46:51
回答 1查看 50关注 0票数 0

一个组件正在调用另一个文件中的函数,setTimer用于更新变量:

timer.js

代码语言:javascript
运行
复制
const timer = () => {
  this.timeout = setTimeout(() => {
    pressTwice = false;
  }, duration);
};

timerUI.js

代码语言:javascript
运行
复制
componentDidMount() {
    timer();
  }

  componentWillUnmount() {
    clearTimeout(this.timeout);// how to clean the this.timeout?
  }

我得到了这个错误:

代码语言:javascript
运行
复制
Can't perform a React state update on an unmouted component.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-02 22:39:13

数据(即状态和属性)通常在react组件树中“向下”流动,即从父到子。如果孩子的兄弟姐妹需要访问其级别或更低级别的数据,解决方案是将数据“放样”到最接近的共同祖先,在本例中是父祖先。换句话说,您需要跟踪父组件中的计时器,以便不同的子组件可以通过props接收对它的引用来取消它。

希望这说明了它的概念:

父级

代码语言:javascript
运行
复制
const setTimer = () => {
  this.timeout = setTimeout(() => {
  pressTwice = false;
}, duration);

render() {
  return (
    <>
      <ChildSetsTimer setTimer={this.setTimer} />
      <ChildClearsTimer timerRef={this.timeout} />
    </>
  );
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58202885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档