RN生命周期
网上看的博客,看着写的很好,想深入学RN的详细看下之后,再自己敲敲吧!有助于身体健康!
一个RN组件从它被加载,到最终被卸载会经历一个完整的生命周期。所谓生命周期,就是一个对象从开始生成到最后消亡所经历的状态,理解生命周期,是合理开发的关键。
ES6语法和之前的ES5语法有所变化,本文是根据ES6语法写的。
在ES5语法中,有getDefaultPropTypes这个函数,这个函数在组件被创建的时候调用一次,它的返回值成为了this.props的初始值
在ES6语法中,属性的类型和默认值声明不像ES5语法那样在组件定义内部声明,而是在组件定义的外部声明,所以生命周期函数没有了getDefaultPropsType了,但是声明DefaultPropTypes也是在组件创建的时候调用一次
constructor 构造函数
这个函数会在组件创建的时候调用一次。这个方法中可以通过this.state初始化状态机(ES5是通过getInitialState方法初始化的)。一般还在该方法中进行方法的bind(this)操作
componentWIllMount
在React Native组件的生命周期中,这个函数只会被执行一次。它在初始渲染(render)前被执行,当它执行完后,render函数会马上被react native框架调用执行.
如果在这个函数中通过setState函数修改状态变量,RN框架不会额外执行渲染
如果子组件也有componentWillMount函数,会在父组件之后调用
如果需要从本地存储中读取数据用于显示,这个函数是一个不错的选择
componentDidMount
在react native组件的生命周期中,这个函数只会被执行一次,它在初始渲染完成后会马上被调用.在这之后可以通过子组件的引用来访问,操作任何子组件.
如果RN组件的子组件也有componentDidMount函数,并会在父组件的componentDidMount函数之前被调用.
一般情况在这个方法中请求网络是一个不错的选择!
componentWillReceiveProps
这个函数的原型是:
componentWillReceiveProps(object nextProps)
在RN组件的初始渲染完成之后,当RN组件接收到新的props时,这个函数将被调用.参数就是新的props.
再次强调下,初次渲染不会调用该方法,是故意设计这种机制的
如果新的props会导致界面重新渲染,这个函数将在渲染前执行.如果函数中修改状态,框架不会立刻执行状态机改变的渲染而是等函数执行完之后一起渲染.
shouldComponentUpdate
这个函数的原型是:
boolean shouldComponentUpdate(obj nextProps,obj nextState)
RN组件的初始化渲染执行完成后,RN组件接收到新的state或者props时这个函数会调用.
函数返回一个布尔值,告诉RN组件是否重新渲染,如果false,不会渲染,相应的下面两个方法componentWIllUpdate和componentDidUpdate不会被调用.
通过这个函数阻止无必要的重新渲染,是提高RN应用程序性能的一大技巧.
componentWillUpdate
这个函数的原型是:
componentWillUpdate(obj nextProps,obj nextState)
初始渲染完成之后,重新渲染前会调用这个函数.但是这个函数不能通过this.setSatte再次改变状态机变量的值
componentDidUpdate
这个函数的原型是:
componentDidUpdate(obj nextProps,obj nextState)
RN组件初始完成之后,RN框架在重新渲染RN组件完成之后调用,参数是渲染前的props和state
componentWillUnMount
这个函数的原型是:
componentWillUnMount()
RN组件卸载前,这个函数被执行
RN生命周期的更多相关文章
- ReactNative——UI2.组件生命周期
对于习惯了iOS开发的同学,可能会对React Native中组件的生命周期很困惑.在iOS中有一个ViewDidLoad来初始化,那么在RN中,又是在哪里呢? 一.看图分析 在下图中描述了React ...
- 【RN - 基础】之React Native组件的生命周期
下图描述了React Native中组件的生命周期: 从上图中可以看到,React Native组件的生命周期可以分为初始化阶段.存在阶段和销毁阶段. 实例化阶段 实例化阶段是React Native ...
- React Native 中组件的生命周期
概述 就像 Android 开发中的 View 一样,React Native(RN) 中的组件也有生命周期(Lifecycle).所谓生命周期,就是一个对象从开始生成到最后消亡所经历的状态,理解生命 ...
- Asp.Net生命周期系列五
如果您看了我的前四篇文章,应该知道目前Http请求已经流到了HttpModule这个程序员手中了,而且我们可以注册自己的HttpModule并且可以在里面注册一些事件来控制这个Http请求,但是到目前 ...
- 从零学习Fluter(三):Flutter的路由跳转以及state的生命周期
今天继续研究Flutter,我是在flutter1.0发布后,才玩flutter的,发现在此之前,许多人已经先发制人,玩起了flutter,不知不觉中,我已经被别人摔在了起跑线上,玩过flutter后 ...
- react native环境搭建与生命周期
1.搭建开发环境 英文文档:http://facebook.github.io/react-native/docs/getting-started.html 中文文档:https://reactnat ...
- React Component Lifecycle(生命周期)
生命周期 所谓生命周期,就是一个对象从开始生成到最后消亡所经历的状态,理解生命周期,是合理开发的关键.RN 组件的生命周期整理如下图: 如图,可以把组件生命周期大致分为三个阶段: 第一阶段:是组件第一 ...
- java多线程(2)---生命周期、线程通讯
java生命周期.线程通讯 一.生命周期 有关线程生命周期就要看下面这张图,围绕这张图讲解它的方法的含义,和不同方法间的区别. 1.yield()方法 yield()让当前正在运行的线程回到就绪 ...
- 《React Native 精解与实战》书籍连载「React Native 中的生命周期」
此文是我的出版书籍<React Native 精解与实战>连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理.React Native 组件布局.组件与 ...
随机推荐
- 【hdu6334】【2018Multi-University-Training Contest04】Problem C. Problems on a Tree
维护1边的联通块和2边的联通块,合并的时候直接启发式合并. cdqz的大爷好强啊. #include<bits/stdc++.h> #define lson (o<<1) #d ...
- Focal Loss笔记
论文:<Focal Loss for Dense Object Detection> Focal Loss 是何恺明设计的为了解决one-stage目标检测在训练阶段前景类和背景类极度不均 ...
- AdvStringGrid 列宽度、列移动、行高度、自动调节
那么有没有办法,让客户自己去调整列的宽度呢? 那么有没有办法 让列宽度.行高度 随着内容而自动变换呢: unit Unit5; interface uses Winapi.Windows, Winap ...
- SQL SERVER 收缩数据库的命令
--备份数据库 BACKUP DATABASE testdb TO DISK='d:\data\testdb20070906.bak' --清空日志 DUMP TRANSACTION testdb W ...
- Oracle学习笔记:parallel并行处理
在使用oracel查询时,可以通过并行提高查询速度.例如: ) from table_name a; 强行启用并行度来执行当前SQL.加上这个说明之后,可以强行启用Oracle的多线程处理功能,提高效 ...
- gtk+学习笔记(七)
今天被一个文本框坑了,基本设置什么的都对,但是就是无法显示中文,按钮名称都可以显示中文,先介绍下文本框的基本函数吧. GtkWidget *gtk_text_view_new(void);新建一个文本 ...
- Visual Studio 2017各版本安装包离线下载
关于Visual Studio 2017各版本安装包离线下载.更新和安装的方法以及通过已下载版本减少下载量的办法 微软最近发布了正式版Visual Studio 2017并公开了其下载方式,不过由于V ...
- mycat 配置文件详解
server.xml 包含mycat的系统配置信息,它有两个标签,分别是user和system,掌握system标签的各项配置属性是mycat调优的关键. <?xml version=" ...
- java.lang.NoClassDefFoundError: ognl/PropertyAccessor
本篇对 Web 开发中,项目部署后.开启 Tomcat 服务器 Console 控制台报错 java.lang.NoClassDefFoundError: ognl/PropertyAccessor ...
- php7的新特性
新增操作符1.??$username = $_GET['user'] ?? '';$username = isset($_GET['user']) ? $_GET['user'] : 'nobody' ...