React组件的生命周期

React组件在网页中会经历创建、更新、删除三个过程。其生命周期也会历经三个过程:

  • 装载过程(Mount)组件第一次在DOM中渲染。
  • 更新过程(Update)组件重新渲染。
  • 卸载过程(Unmount)组件在DOM中删除。
    下面对这三个过程进行详细阐述。

装载过程:

装载过程是组件第一次在DOM中渲染的过程,会依次调用如下函数:
1. constructor
2. getInitialState
3. getDefaultProps
4. componentWillMount
5. render
6. componentDidMount

下面对这些函数进行说明:

constructor:

   constructor函数是组件的构造函数,主要功能为:
    1. 初始化state
    2. 绑定函数的this环境(也可不进行绑定,函数使用ES6中的箭头函数即可绑定this到当前组件实例)

    constructor( props ){
        super(props)
        //初始化state
        this.state = {count:props.initValue};
        //绑定onClickButton函数的this环境
        this.onClickButton = this.onClickButton.bind(this)
    }
getInitialState && getDefaultProps:

    getInitialState和getDefaultProps函数在ES6的React组件中不会用到,一个是设置初始状态,一个是设置默认属性。

componentWillMount:

    componentWillMount也基本不会用到,componentWillMount发生在即将装载时,即使重新setState也已经迟了,不会引起重绘,所以componentWillMount的内容完全可以放在constructor中执行。

render:

    render函数为纯函数,不可以在render函数中改变组件的props和state。组件中一定要有render函数,因为其他函数都有默认实现,而render函数没有。如果组件不需要渲染界面,则在render中返回null或者false即可。

componentDidMount:

    当render函数返回的东西已经发生渲染后,会触发componentDidMount函数。该函数是经常使用的函数。

更新过程:

更新过程就是组件的props或者state改变时触发组件的更新。依次调用如下函数:
1. componentWillReceiveProps
2. shouldComponentUpdate
3. componentWillUpdate
4. render
5. componentDidUpdate

下面对这些函数进行说明:

componentWillReceiveProps(nextProps):

    只要父组件的render函数被调用,在其render函数中的子组件就会触发componentWillReceiveProps函数。

shouldComponentUpdate(nextProps, nextState):

    规定什么时候需要重新渲染,用于提高React组件性能。

componentWillUpdate、componentDidUpdate:

    类似于componentWillMount和componentDidMount,一个在render前,一个在render后。

卸载过程:

卸载过程只涉及如下函数:
1. componentWillUnmount
因为卸载组件后不需要再对组件有任何操作,所以只需要componentWillUnmount函数对组件删除之前进行一些操作即可。

整体流程图:

流程图可参考下方流程图:
3284159097-5bbb08d17db33_articlex.png

新的生命周期

新的生命周期加入了static getDerivedStateFromProps (nextProps, prevState)getSnapshotBeforeUpdate (prevProps, prevState)这两个钩子函数用来代替componentWillReceiveProps以及componentWillUpdate,也删除了componentWillMount
static getDerivedStateFromProps (nextProps, prevState)可以直接return相应的state,以更新当前的state,如果没有状态更新,则return null.
getSnapshotBeforeUpdate (prevProps, prevState)发生在React更新Dom元素之前,获取一个快照,它返回的结果将作为componentDidUpdate(prevProps, prevState,snapShot)的第三个参数,可根据第三个参数的值在componentDidUpdate生命周期中进行状态更新。
同时,加入了错误捕获处理钩子函数componentDidCatch用来捕获错误。

参考文献:
React-新的生命周期 https://segmentfault.com/a/1190000016617400?utm_source=tag-newest#item-1

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,874评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,102评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,676评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,911评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,937评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,935评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,860评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,660评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,113评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,363评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,506评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,238评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,861评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,486评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,674评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,513评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,426评论 2 352

推荐阅读更多精彩内容

  • 作为一个合格的开发者,不要只满足于编写了可以运行的代码。而要了解代码背后的工作原理;不要只满足于自己的程序...
    六个周阅读 8,439评论 1 33
  • React 组件的一生,是光荣的一生,是革命的一生,在它的一生中会经历这样几个阶段: 装载阶段 更新阶段 销毁阶段...
    柏丘君阅读 944评论 0 0
  • React严格定义了组件的生命周期,生命周期可能会经历如下三个过程:·装载过程(Mount),也就是把组件第一次在...
    追风的云月阅读 2,208评论 0 0
  • 组件的生命周期 组件在react的生命周期中主要经历三个阶段:实例化、存在期和销毁时。React.js在组件生命周...
    落花的季节阅读 571评论 0 2
  • 一般来说,一个组件类由 extends Component 创建,并且提供一个 render 方法以及其他可选的生...
    ElineC阅读 643评论 0 2