ReactNative For Android 之六:组件生命周期

ReactNative For Android 之六:组件生命周期

  • 一.周期方法
  • 二.基本流程

系列文章:
ReactNative For Android 之一:环境搭建
ReactNative For Android 之二:基本组件和API
ReactNative For Android 之三:工程结构
ReactNative For Android 之四:自定义组件
ReactNative For Android 之五:自定义module
ReactNative For Android 之六:组件生命周期

一.周期方法

  1. getDefaultProps:

    • 在组件类创建的时候调用一次(一般app启动时会加载组件类),里面返回的对象是定义的props的初始值,没有被覆盖时就是用这个默认值;

    • 返回的props对象是该组件的props(共用内存空间),每次用到该组件都有这些props的默认值;不能通过this.props.xxx = xxx;的方式修改props,其为只读属性;

  2. getInitialState:

    • 在组件挂载(mount)前调用一次,返回的对象作为this.state的初值,在切换到同一组件实例时不会变化(因为没卸载,用的还是一个组件实例);

    • 通过this.state.xxx = xxx;的方式赋值不会刷新,之后可能被setState替换,所以当作它是不可变的来使用;

    • 类似方法还有:

      • replaceState({}):也是更新,但是是替换之前的state

      • forceUpdate():主动告知刷新,比如使用this.state.xxx的方式直接更新;但应尽量避免这个操作,让数据都通过props和state来获取从而自动更新;=

  3. componentWillMount:
    组件将要挂载前调用一次,做一些准备工作,比如设置数据值等;
    在此setState的话render会感知这个最新的state,而不是再刷新一次;

  4. render:
    绘制方法,尽量不要在里面更新state,而是使用它

  5. componentDidMount:
    组件挂载渲染(初始化渲染)结束调用

  6. componentWillUnmount:
    组件卸载前调用,通常切换到不同组件时该组件卸载;
    该方法执行完后调用this.isMounted()方法返回false,类似与android的isFinishing();

  7. componentWillReceiveProps(nextProps):

    • 当新的props来的时候调用并传入新的props可以和当前的props(this.props)做一些处理,往往发生在切换到同一组件时候调用;

    • 切换同一组件时,不会卸载该组件而是继续使用,state不变,props传入新的做处理,没传的props将会用getDefaultProps返回的默认值;

  8. shouldComponentUpdate(nextProps,nextState):
    在接收到新的props后会调用此方法,拿到新的props和state来和现有的做一些逻辑处理,最终返回false就是不允许刷新,也就不会调用下面两个方法和render方法,返回true则可以刷新;

  9. componentWillUpdate(nextProps,nextState):
    当shouldComponentUpdate返回true时,则会调用该方法,做些刷新前的准备,然后调用render方法刷新;

  10. componentDidUpdate(prevProps,prevState):
    刷新完后调用,可以拿到之前的的props和state(因为props和state已经被更新了)

二.基本流程

  1. 组件类加载时(进入app):getDefalutProps

  2. 首次切换到组件时:getInitialState -> componentWillMount -> render -> componentDidMount

  3. 再次切换到组件时:componentWillReceiveProps -> shouldComponentUpdate -> 返回
    true(false停止在此) -> componentWillUpdate -> render -> componentDidUpdate

  4. 卸载该组件时(切换到别的组件):componentWillUnmount

你可能感兴趣的:(知识积累,android相关,ReactNative)