React-native 中因为计时器导致的异常解决办法
2016-12-02 10:22
423 查看
很多React Native应用发生致命错误(闪退)是与计时器有关。在某个组件被卸载(unmount)之后,计时器却仍然被激活。为了解决这个问题,需要在组件中引入
这个库并没有跟着React Native一起发布。你需要在项目文件夹下输入
Mixin属于ES5语法,对于ES6代码来说,无法直接使用Mixin。如果你的项目是用ES6代码编写,同时又使用了计时器,那么你只需铭记
TimerMixin,就可以把你原本的
setTimeout(fn, 500)改为
this.setTimeout(fn, 500)(只需要在前面加上
this.),然后当你的组件卸载时,所有的计时器事件也会被正确的清除。
这个库并没有跟着React Native一起发布。你需要在项目文件夹下输入
npm i react-timer-mixin --save来单独安装它。
Mixin属于ES5语法,对于ES6代码来说,无法直接使用Mixin。如果你的项目是用ES6代码编写,同时又使用了计时器,那么你只需铭记
在unmount组件时清除(clearTimeout/clearInterval)所有用到的定时器,那么也可以实现和TimerMixin同样的效果。例如:
import React,{ Component } from 'react'; export default class Hello extends Component { componentDidMount() { this.timer = setTimeout( () => { console.log('把一个定时器的引用挂在this上'); }, 500 ); } componentWillUnmount() { // 如果存在this.timer,则使用clearTimeout清空。 // 如果你使用多个timer,那么用多个变量,或者用个数组来保存引用,然后逐个clear this.timer && clearTimeout(this.timer); } };
相关文章推荐
- 利用Immutable解决React-Native那些因为对象被篡改导致的多次render问题
- 利用Immutable解决React-Native那些因为对象被篡改导致的多次render问题
- 利用Immutable解决React-Native那些因为对象被篡改导致的多次render问题
- MySQL数据库连接异常断开导致事务没提交的解决办法
- 异常关机导致ORA-01034、ORA-27101问题解决办法
- react-native Requring invalid module "image! 解决办法 android
- 外接程序 VMDebugger 未能加载或导致了异常的解决办法
- Oracle 过程中的select into 中查询记录数不是1导致异常的解决办法
- jedis 连接异常导致不能订阅的解决办法
- 关于FusionCharts图表宽度width的设置问题导致图表显示异常的解决办法
- react-native在Anroid真机运行时可能会遇到白屏的情况解决办法
- 技术贴】QQ空间打开缓慢,无法编辑日志,由于您当前网络不稳定导致QQ空间打开异常的解决办法。
- JNI调用native方法出现 java.lang.UnsatisfiedLinkError: XXXclass.XXXmethod()异常的解决办法
- Linux Root下的.gvfs出现异常解决办法(导致source失败,自启动失败)
- MapperScannerConfigurer与<context:property-placeholder>加载顺序导致异常解决办法
- 关于FusionCharts图表宽度width的设置问题导致图表显示异常的解决办法
- sqlserver 出现 因为文件组 'PRIMARY' 已满 的解决办法 有可能是磁盘剩余空间不足 导致的
- eclipse上一次没有正确关闭,导致启动的时候卡死异常解决办法解决办法
- 进程异常退出导致死锁的解决办法