> { this.setState({ listenerMsg:listenerMsg, }) }); } goMainPage=()=>{ this.timer = setTimeout( () => { console.log('把一个定时器的引用挂在this上'); }, 500 ); }; componentWillUnmount() { //此生命周期内,去掉监听和定时器 this.msgListener&&this.msgListener.remove(); // 如果存在this.timer,则使用clearTimeout清空。 // 如果你使用多个timer,那么用多个变量,或者用个数组来保存引用,然后逐个clear this.timer && clearTimeout(this.timer); }
9.【强制】使用本地图片资源时,需设置宽高并进行适当适配;
imgHeight=screenHeight, imgWidth= screenWidth
10.【强制】在React-Native版本小于0.46.0使用本地图片资源时,当不指定特殊尺寸图片时,需引入不同尺寸XX.png,XX2@.png,XX3@.png图片,并在代码引用中,使用如下方式:
<Image style={{flex: 1, height: screenHeight, width: screenWidth}} source={require('../XX.png')}>
说明:当使用XX.png时,程序运行过程中会根据不同屏幕尺寸获取不同资源;当使用如下方式:
<Image style={{flex: 1, height: screenHeight, width: screenWidth}} source={require('../XX2@.png')}>
时,程序运行过程中不会根据不同屏幕尺寸获取不同资源。 注意:此方式适用于React-Native0.46.0版本之前。
9.【强制】在React-Native版本大于0.46.0使用本地资源,图片命名不能出现‘@’符号: 说明:不同大小图片需要原生不同的尺寸文件夹,系统自动进行不同适配。
###(二) 样式
-
【强制】 当组件使用样式属性达到三个或者三个以上时,必须使用StyleSheet来创建样式属性并进行引用; const styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: '#F5FCFF', marginTop:10, }, });
-
【推荐】 当使用单一属性,或者全局样式属性时,推荐使用公共样式类; //StyleCommon.js module.exports={ topColor:{ backgroundColor: '#3A3D42', }, mainView:{ backgroundColor: '#12141B', }, }
-
【推荐】 当使用多个state或者props值时,推荐使用以下方式; const {size, dotRadius, color} = this.props; const { maxNumber,minNumber,}=this.state;
说明使用此方式,代码结构清晰简洁,便于维护;
###(三) var,let,const
- 【强制】对所有变量,对象的引用,使用const,不要使用var;
- 【推荐】如果一定需要引用可变动的变量,对象,建议使用let代替var;
###(四) 代码间隔
- 【强制】使用ES6编写代码,定义方法时,每个方法结尾使用‘;’进行分隔;
###(五) 其他
-
【强制】对组件引用,变量引用,需遵从以下方式; import React, {Component} from 'react'; import{ View, Text, TouchableHighlight, Image, StyleSheet, InteractionManager, } from 'react-native'; //from react,react-native优先; //from npm库其次; import { connect } from 'react-redux'; //from 项目内组件其次; import LoadingAndTime from '../component/LoadingAndTime'; import { performLoginAction } from '../action/LoginAction' import {encode} from '../common/Base64'; //变量初始化,常量初始化 最后; let screenWidth = Dimensions.get('window').width; let screenHeight = Dimensions.get('window').height; let typeCode = Platform.OS == 'android' ? 'android-phone' : 'ios-phone' let selectColor=Platform.OS=='android'?null:'white'
-
【推荐】对组件引用,变量初始化等,在整个页面或组件内未使用,因去除相关代码;
##三、编码约定
###(一)入口文件
1.【推荐】统一入口文件为App.js; 说明:在index.android.js和index.ios.js文件中,统一入口文件为App.js,且保持所在目录和index.android.js和index.ios.js同级。
2.【强制】开发中,不要使用任何后端的开发模式来构建APP结构,如使用MVC,MVP,MVVM等开发模式,React-Native推荐组件化,颗粒化,以上设计模式严重违背。若使用Redux,Mobx等数据流第三方,可依据第三方结构编写构建App。
###(二) 模版文件
1.【推荐】根据附件,配置代码编写模版,推荐使用第二种配置方式,可配置多种模版。
##四、自定义组件 (一) 自定义组件
-
【强制】组件命名中必须包含Component; 说明: ButtonComponent.js LabelComponent.js
-
【强制】组件中定义的state和props必须都要有注释,依次说明每个值的含义;
-
【强制】在每个类的头部注释中,必须使用/**/说明此组件的基础使用方式以及特殊使用方法;
(二) 属性判断
-
【强制】代码中使用props时,需进行propTypes检测和defaultProps默认值初始化; static propTypes = { color: PropTypes.string, dotRadius: PropTypes.number, size: PropTypes.number }; static defaultProps = { color: '#1e90ff', dotRadius: 10, size: 40 };
(三) 性能优化
-
【强制】无状态组件需使用PureComponent而不是Component; 说明:无状态组件是指内部没有使用state的组件,但是可以使用props来进行某些属性控制; export default class LinkButton |