React Native组件生命周期
来源:互联网 发布:单片机电子设计与制作 编辑:程序博客网 时间:2024/05/21 17:17
React native教程
React Native组件生命周期
一、React Native组件生命周期(ES6)
(1)、概念
对于组件的生命周期来说分为四个阶段,分别为:创建阶段、实例化阶段、运行(更新)阶段、销毁阶段。
(2)、创建阶段
该阶段主要发生在创建组件类的时候,在这个阶段中会初始化组件的属性类型和默认属性。
defaultProps/getDefaultProps()
这里会初始化一些默认的属性,通常会将固定的内容放在这个过程中进行初始化和赋值。由于组件初始化后,再次使用该组件不会调用getDefaultProps函数,所以组件自己不可以自己修改props(即:props可认为是只读的),只可由其他组件调用它时在外部修改。
在ES5里,属性类型和默认属性分别通过propTypes成员和getDefaultProps方法来实现。
//ES5getDefaultProps: function(){ return { autoPlay: false, maxLoops: 10, };},propTypes:{ autoPlay: React.PropTypes.bool.isRequired, maxloops: React.PropTypes.number.isRequired, posterFrameSrc: React.PropTypes.string.isRequired, videoSrc: React.PropTypes.string.isRequired,},
在ES6里,可以统一使用static成员来实现.
//ES6static DefaultProps(){ return { autoPlay: false, maxLoops: 10, };}; //注意这里有分号static propTypes = { autoPlay: React.PropTypes.bool.isRequired, maxloops: React.PropTypes.number.isRequired, posterFrameSrc: React.PropTypes.string.isRequired, videoSrc: React.PropTypes.string.isRequired,}; //注意这里有分号
(3)、实例化阶段
该阶段主要发生在组件类被调用(实例化)的时候。
constructor(props)/getInitialState()
这里是对控件的一些状态进行初始化,由于该函数不同于getDefaultProps,在以后的过程中,会再次调用,所以可以将控制控件的状态的一些变量放在这里初始化,如控件上显示的文字,可以通过this.state来获取值,通过this.setState来修改state值。
在ES5里,通过getInitialState对状态进行初始化
getInitialState: function() { return { loopsRemaining: this.props.maxLoops, };},
在ES6里,通过constructor(构造器)对状态进行初始化
constructor(props){ super(props); this.state = { loopsRemaining: this.props.maxLoops, };}
componentWillMount()
准备加载组件
这个调用时机是在组件创建,并初始化了状态之后,在第一次绘制 render() 之前。可以在这里做一些业务初始化操作,也可以设置组件状态。这个函数在整个生命周期中只被调用一次。
render()
render是一个组件必须有的方法,形式为一个函数,渲染界面,并返回JSX或其他组件来构成DOM,和Android的XML布局、WPF的XAML布局类似,只能返回一个顶级元素。
componentDidMount
在组件第一次绘制之后,会调用 componentDidMount(),通知组件已经加载完成。
(4)、运行(更新)阶段
componentWillReceiveProps(nextProps)
当组件接收到新的props时,会触发该函数。在该函数中,通常可以调用setState()来完成对state的修改。
输入参数 nextProps 是即将被设置的属性,旧的属性还是可以通过 this.props 来获取。在这个回调函数里面,你可以根据属性的变化,通过调用 this.setState() 来更新你的组件状态,这里调用更新状态是安全的,并不会触发额外的 render() 调用。
componentWillReceiveProps: function(nextProps) { this.setState({ likesIncreasing: nextProps.likeCount > this.props.likeCount });}
shouldComponentUpdate(nextProps, nextState)
返回布尔值(决定是否需要更新组件)
输入参数 nextProps 和上面的 componentWillReceiveProps 函数一样,nextState 表示组件即将更新的状态值。这个函数的返回值决定是否需要更新组件,如果 true 表示需要更新,继续走后面的更新流程。否者,则不更新,直接进入等待状态。
默认情况下,这个函数永远返回 true 用来保证数据变化的时候 UI 能够同步更新。在大型项目中,你可以自己重载这个函数,通过检查变化前后属性和状态,来决定 UI 是否需要更新,能有效提高应用性能。
componentWillUpdate(nextProps, nextState)
shouldComponentUpdate返回true或者调用forceUpdate之后,就会开始准更新组件,并调用 componentWillUpdate()。
输入参数与 shouldComponentUpdate 一样,在这个回调中,可以做一些在更新界面之前要做的事情。需要特别注意的是,在这个函数里面,你就不能使用 this.setState 来修改状态。这个函数调用之后,就会把 nextProps 和 nextState 分别设置到 this.props 和 this.state 中。紧接着这个函数,就会调用 render() 来更新界面了。
render()
再确定需要更新组件时,调用render,根据diff算法,渲染界面,生成需要更新的虚拟DOM数据。
componentDidUpdate()
虚拟DOM同步到DOM中后,执行该方法,可以在这个方法中做DOM操作。
除了首次render之后调用componentDidMount,其它render结束之后都是调用componentDidUpdate。
(5)销毁阶段
该阶段主要发生组件销亡的时候,触发componentWillUnmount。当组件需要从DOM中移除的时候,通常需要做一些取消事件绑定,移除虚拟DOM中对应的组件数据结构,销毁一些无效的定时器等工作,都可以在这个方法中处理。
componentWillUnmount()
当组件要被从界面上移除的时候,就会调用 componentWillUnmount。
在这个函数中,可以做一些组件相关的清理工作,例如取消计时器、网络请求等。
(6)、总体流程图
- React Native 组件生命周期
- react native 组件生命周期
- React Native组件生命周期
- React Native组件生命周期
- react-native 组件生命周期
- React-Native 组件 生命周期
- React Native组件生命周期
- react-native组件的生命周期
- React Native 组件的生命周期
- react native 组件生命周期变化
- React Native组件的生命周期
- React Native组件的生命周期
- react-native组件的生命周期
- React Native 组件的生命周期
- Android React Native组件的生命周期
- React Native 中组件的生命周期
- React Native 中组件的生命周期
- React Native 中组件的生命周期
- HDOJ2058The sum problem
- 初识javaweb之http协议和tomcat
- struts2 基本
- Spring动态代理用JDK还是用CGLIB?
- merge合并链表
- React Native组件生命周期
- 面向新手的Web服务器搭建(一)——IIS的搭建
- 《数据结构与算法-Python语言描述》读书笔记(8)第8章字典和集合(关键词:数据结构/算法/Python/字典/集合)
- 【Noip模拟】RP字符串
- 通信原理
- java 异常处理 Throwable Error 和Exception
- 经典算法之二维数组中的查找问题
- HDOJ2059龟兔赛跑
- Docker--创建ssh远程镜像