务必注销监听事件
Page A
componentWillMount() {
this.subscription = DeviceEventEmitter.addListener("toggleEditMode", () => {
alert('registry a event listenr');
});
}
第一次进入 Page A:
alert('registry a event listenr')
第二次进入 Page A:
alert('registry a event listenr') X 2
缘由: RN 并不会自动注销咱们注册的事件, 须要手动注销
方法: 在 componentWillUnmount 生命周期中手动注销, 而且注销时注意先判断存在此事件, 再执行 remove 方法
componentWillUnmount() {
// 注销 subscription 事件的监听
this.subscription && this.subscription.remove();
}
复制代码
禁止字体随系统字体一块儿放大
在调整过系统字体的 RN 项目中, 页面中的字体会跟随系统字体一块儿变化, 咱们须要调整组件属性:
TextInput.defaultProps = Object.assign({}, TextInput.defaultProps, { defaultProps: false });
Text.defaultProps = Object.assign({}, Text.defaultProps, { allowFontScaling: false });
复制代码
捕获全局错误 保障 App 稳定度
有时候一些莫名的错误会发生, 但咱们又不能及时定位, 借助这个语句有助于捕获全局错误
// 捕获全局错误
require('ErrorUtils').setGlobalHandler(err => { });
复制代码
屏蔽 黄色警告 与 三指滑动
console.disableYellowBox = true // 关闭所有黄色警告
console.reportErrorsAsExceptions = false // 屏蔽三指操做 (某些支持三指操做的机型可能会崩溃)
复制代码
在互动和动画的过程当中避免繁重的操做
为了不在 互动和动画的过程当中产生繁重的操做, 让 JS 在执行完动画的做务后再去执行 其它逻辑
componentDidMount() {
InteractionManager.runAfterInteractions(() => {
// 初次访问页面时切换 选项卡
this.handleChangeTab('Usual');
// 加载文章数据
this.loadUsualData();
});
}
使用 setImmediate 或 requestAnimationFrame 来避免繁重做务调度:
setImmediate(() => {
this.loadUsualData();
...
...
});
或
requestAnimationFrame(() => {
this.loadUsualData();
...
...
});
基于 JS 单线程的特色,咱们要避免在同一时间作较多的做务, 例如动画渲染,接口请求,或是改变页面样式
复制代码