ReactNative For Android 之六:组件生命周期
系列文章:
ReactNative For Android 之一:环境搭建
ReactNative For Android 之二:基本组件和API
ReactNative For Android 之三:工程结构
ReactNative For Android 之四:自定义组件
ReactNative For Android 之五:自定义module
ReactNative For Android 之六:组件生命周期
一.周期方法
-
getDefaultProps:
-
在组件类创建的时候调用一次(一般app启动时会加载组件类),里面返回的对象是定义的props的初始值,没有被覆盖时就是用这个默认值;
-
返回的props对象是该组件的props(共用内存空间),每次用到该组件都有这些props的默认值;不能通过
this.props.xxx = xxx;的方式修改props,其为只读属性;
-
-
getInitialState:
-
在组件挂载(mount)前调用一次,返回的对象作为this.state的初值,在切换到同一组件实例时不会变化(因为没卸载,用的还是一个组件实例);
-
通过this.state.xxx = xxx;的方式赋值不会刷新,之后可能被setState替换,所以当作它是不可变的来使用;
-
类似方法还有:
-
replaceState({}):也是更新,但是是替换之前的state
-
forceUpdate():主动告知刷新,比如使用this.state.xxx的方式直接更新;但应尽量避免这个操作,让数据都通过props和state来获取从而自动更新;=
-
-
-
componentWillMount:
组件将要挂载前调用一次,做一些准备工作,比如设置数据值等;
在此setState的话render会感知这个最新的state,而不是再刷新一次; -
render:
绘制方法,尽量不要在里面更新state,而是使用它 -
componentDidMount:
组件挂载渲染(初始化渲染)结束调用 -
componentWillUnmount:
组件卸载前调用,通常切换到不同组件时该组件卸载;
该方法执行完后调用this.isMounted()方法返回false,类似与android的isFinishing(); -
componentWillReceiveProps(nextProps):
-
当新的props来的时候调用并传入新的props可以和当前的props(this.props)做一些处理,往往发生在切换到同一组件时候调用;
-
切换同一组件时,不会卸载该组件而是继续使用,state不变,props传入新的做处理,没传的props将会用getDefaultProps返回的默认值;
-
-
shouldComponentUpdate(nextProps,nextState):
在接收到新的props后会调用此方法,拿到新的props和state来和现有的做一些逻辑处理,最终返回false就是不允许刷新,也就不会调用下面两个方法和render方法,返回true则可以刷新; -
componentWillUpdate(nextProps,nextState):
当shouldComponentUpdate返回true时,则会调用该方法,做些刷新前的准备,然后调用render方法刷新; -
componentDidUpdate(prevProps,prevState):
刷新完后调用,可以拿到之前的的props和state(因为props和state已经被更新了)
二.基本流程
-
组件类加载时(进入app):getDefalutProps
-
首次切换到组件时:getInitialState -> componentWillMount -> render -> componentDidMount
-
再次切换到组件时:componentWillReceiveProps -> shouldComponentUpdate -> 返回
true(false停止在此) -> componentWillUpdate -> render -> componentDidUpdate -
卸载该组件时(切换到别的组件):componentWillUnmount
更多推荐
所有评论(0)