React Native填坑之旅--组件生命周期
这次我们来填React Native生命周期的坑。这一点非常重要,需要有一个清晰的认识。如果你了解Android或者iOS的话,你会非常熟悉我们今天要说的的内容。
基本上一个React Native的组件会经历三个阶段最终渲染在界面上,他们分别是:开始渲染、更新、卸载。
开始渲染:
componentWillMount
componentWillMount(): void
组件开始渲染的时候调用这个方法
componentDidMount
componentDidMount(): void
组件的渲染完成之后调用这个方法。子组件的componentDidMount方法会在父组件的前面调用。componentWillMount在componentDidMount方法之前调用,这个时候组件还没有渲染完成。所以在componentWillMount里调用setState方法会立刻在render方法里看到更新了的数据。
更新
componentWillReceiveProps
componentWillReceiveProps(nextProps: Object): void
当有新的Props发送给组件的时候,这个方法被触发。最开始的render并不会调用这个方法! 使用这个方法可以在更新state,render方法被调用之前修改组件的props。在这个方法里可以使用this.props来使用旧的props。在这个方法里调用setState方法不会触发额外的render。
例如:
componentWillReceiveProps(nextProps) {
this.setState({
currentCategory: nextProps.category !== this.props.category
? nextProps.category
: this.props.category
});
}
shouldComponentUpdate
shouldComponentUpdate(nextProps: Object, nextState: Object): void
当收到新的props或者state的时候触发这个方法。默认情况下shouldComponentUpdate一直返回true。这个方法在第一次render的时候不会调用。当你确定props和state被设置为新的值以后不需要组件更新的时候返回false。之后render方法在本次的更新中就会被直接跳过,componentWillUpdate和componentDidUpdate两个方法也不会被调用。
componentWillUpdate
componentWillUpdate(nextProps: Object, nextState: Object): void
在props或者state更新之后立即调用这个方法。这个方法不会在第一次render的时候调用。
render
render(): ReactElement<{}>
当render方法被调用的时候,组件会根据新的this.props和this.state绘制。render方法应该是一个纯方法。也就是说,它不修改组件的state,并且每次调用都返回相同的结果。当然,这个需要开发者来保证。
componentDidUpdate
componentDidUpdate(prevProps: Object, prevState: Object): void
每次组件更新之后调用。第一次render的时候不会调用。
卸载
componentWillUnmount(): void
组件被卸载之后调用。可以在这个方法里执行一些清理操作。
React Native填坑之旅--组件生命周期的更多相关文章
- React Native填坑之旅--与Native通信之iOS篇
终于开始新一篇的填坑之旅了.RN厉害的一个地方就是RN可以和Native组件通信.这个Native组件包括native的库和自定义视图,我们今天主要设计的内容是native库方面的只是.自定义视图的使 ...
- React Native填坑之旅--布局篇
代码在这里: https://github.com/future-challenger/petshop/tree/master/client/petshop/src/controller 回头看看RN ...
- React Native填坑之旅--Flow篇(番外)
flow不是React Native必会的技能,但是作为正式的产品开发优势很有必要掌握的技能之一.所以,算是RN填坑之旅系列的番外篇. Flow是一个静态的检查类型检查工具,设计之初的目的就是为了可以 ...
- React Native填坑之旅--Stateless组件
Stateless component也叫无状态组件.有三种方法可以创建无状态组件. 坑 一般一个组件是怎么定义的: 很久以前的方法: const Heading = createClass({ re ...
- React Native填坑之旅--动画
动画是提高用户体验不可缺少的一个元素.恰如其分的动画可以让用户更明确的感知当前的操作是什么. 无疑在使用React Native开发应用的时候也需要动画.这就需要知道RN都给我们提供了那些动画,和每个 ...
- React Native填坑之旅--重新认识RN
如同黑夜里的一道光一样,就这么知道了F8. F8是每年一次Facebook每年一次的开发者大会.每次大会都会release相应的APP,iOS.Android都有.之前都是用Native开发的,但是2 ...
- React Native填坑之旅--Navigation篇
React Native的导航有两种,一种是iOS和Android通用的叫做Navigator,一种是支持iOS的叫做NavigatorIOS.我们这里只讨论通用的Navigator.会了Naviga ...
- React Native填坑之旅--ListView篇
列表显示数据,基本什么应用都是必须.今天就来从浅到深的看看React Native的ListView怎么使用.笔者写作的时候RN版本是0.34. 最简单的 //@flow import React f ...
- React Native填坑之旅--Button篇
从React过来,发现React Native(以下简称RN)居然没有Button.隔壁的iOS是有UIButton的,隔壁的隔壁的Android里也是有的.没有Button,就没有点击效果啊.这还真 ...
随机推荐
- ubuntu apt 安装
1. ./autogen.sh: libtoolize: not found sudo apt-get install aptitude sudo aptitude install libtool 2 ...
- Varnish简介
Varnish介绍: Varnish是一个反向HTTP代理,有时也被称为HTTP的加速器或网络加速器:它存在于真实服务器的前面(可能有多级代理),将来自于客户端的请求中的部分内容存储在自身的内存中,以 ...
- python第十八天-----Django基础
1.路由系统 a.普通路由 url(r'^index$', views.index), b.正则路由 url(r'^index/(\d*)', views.index), url(r'^manage/ ...
- maxiang conf
/**设置你自己的CSS.例如:h1 {border-bottom: 1px solid #ccc;line-height:1.6;}body {background:#FDFFD0} **/ p ...
- SQL中EXISTS怎么用[转]
SQL中EXISTS怎么用 1 2 3 4 分步阅读 EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False 方法/步骤 1 EXISTS用于 ...
- HTML DOM 方法
一.HMTL DOM对象 --方法和属性 1.1常用的方法. 1.getElementByld( id )方法 --获取带有指定id 的节点( 元素 ) 2.appendChild( node )方法 ...
- 如何在在WinFrom的DataGridView中做到数据持续动态加载而不卡死
1.在这个过程我用过好几种办法 (1)使用委托的办法,这个方法可以做到持续加载,但是效果不理想会卡死 (2)开启线程的方法,会造成卡死 (3)使用另一个窗体的线程做持续加载(子窗体),让子窗体作为一个 ...
- Ext.Net TreePanel 修改Icon图标
分类: Ext.Net2012-09-24 13:44 1779人阅读 评论(0) 收藏 举报 webformserverextassemblyxhtmlobject 1.默认icon 2.自定义ic ...
- flask-admin章节三:数据库迁移工具 alembic初步使用
1. 概述 基于flask框架构建web,一般会使用sqlchemy(在flask中使用sqlchemy可以参考这里)作为数据库引擎. 这样业务的逻辑就可以做到不跟具体的数据库类型相耦合,具体后端业务 ...
- sql学习
1.改变表的某一字段的长度: alter table tt modify a char(2000); 2.不想打开表就查看某一字段的长度可用下面的方法: select length(a),leng ...