为了账号安全,请及时绑定邮箱和手机立即绑定

本机反应 - 为计时器应用程序优化 ReactJS 代码

本机反应 - 为计时器应用程序优化 ReactJS 代码

蝴蝶刀刀 2022-09-29 16:57:23
我目前正在将我的 ReactJS 代码移动到 React Native,我想知道我是否需要以任何方式更新它。它正在工作,但我相信某个地方可能存在内存泄漏(我在运行应用程序时收到警告)。我所指的部分是:class Stopwatch extends Component {  constructor() {    super();    this.state = {      timerOn: false,      timerStart: 0,      timerTime: 0    };  }  startTimer = () => {        this.setState({          timerOn: true,          timerTime: this.state.timerTime,          timerStart: Date.now() - this.state.timerTime,        });        this.timer = setInterval(() => {          this.setState({            timerTime: Date.now() - this.state.timerStart          });        }, 10);      };        stopTimer = () => {        this.setState({           timerOn: false,        });        clearInterval(this.timer);      };    render() {        return (              <View>                  {this.state.timerOn === false && this.state.timerTime === 0 && (                    <TouchableOpacity style={styles.button} onPress={this.startTimer}>                      <Text>start</Text>                    </TouchableOpacity>                   )}                  {this.state.timerOn === true && (                    <TouchableOpacity style={styles.button} onPress={this.stopTimer}>                      <Text>stop</Text>                    </TouchableOpacity>                  )}              </View>}<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
查看完整描述

1 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

如果组件在计时器运行时卸载,则会发现内存泄漏。这是因为集合间隔永远不会被清除;间隔回调仍将触发,并且由于它调用 setState,因此即使组件不再挂载,它也会尝试更新组件(导致错误消息)

要解决此问题,您只需要使用组件“将卸载”生命周期方法清除 setInterval。

https://reactjs.org/docs/state-and-lifecycle.html


查看完整回答
反对 回复 2022-09-29
  • 1 回答
  • 0 关注
  • 106 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号