React-生命週期

來源:互聯網
上載者:User

每個生物都有它自己的生命週期,從出生、少年、成年再到死亡。同理,組件也有它特定的生命週期,React用不同的方法來描述它的整個生命週期。

下面是定義一個react組件的結構:

import React, { Component } from 'react';class Test extends Component {    constructor(props, context) {        super(props, context)        this.state = {            //定義state        }    }    componentWillMount() {}    componentDidMount() {}    componentWillReceiveProps(nextProps) {}    shouldComponentUpdate(nextProps, nextState) {}    componentWillUpdate(nextProps, nextState) {}    componentDidUpdate(prevProps, prevState) {}    render() {        return(            <div></div>        )    }    componentWillUnmount() {}}export default Demo;

下面進行各生命週期的詳解:

生命週期

1)getDefaultProps: 在裝載之前調一次,在組件中賦值的資料會被設定到this.props中;

2)getInitialState: 調用在裝載之前,這個函數的傳回值會被設定到this.state中。在ES6的寫法中,只需寫在constructor中即可;

  class Demo extends Component {        constructor(props, context) {//只要組件存在constructor,就必須要寫super,否則this指向會錯誤            super(props, context)            this.state = {                //定義state            }        }  }     

3)componentWillMount: 在render之前被調用,可以在渲染前做一些準備工作(一般用在服務端渲染);

4)componentDidMount: 組件第一次渲染完成,此時dom節點已經產生,可以在這裡調用ajax請求,返回資料setState後組件會重新渲染;

5)componentWillReceiveProps: 在接受父組件改變後的props需要重新渲染組件時用到的比較多,它接收一個nextProps參數,通過對比nextProps和this.props,將nextProps setState設定為當前的state,從而重新渲染組件;

6)shouldComponentUpdate: 在重新render之前被調用,會返回一個Boolean值,false時為阻止組件的更新;註:因為react父組件重新渲染會導致其所有子組件的重新渲染,這個時候我們可能並不需要左右的子組件跟著重新渲染,因此需要在子組件的該生命週期中做判斷;

7)componentWillUpdate:在render調用之前,可以渲染一些準備工作,當 shouldComponentUpdate返回true時,組件進入重新渲染的過程;

8)render: render函數會插入jsx產生的dom結構,react會產生一份虛擬dom樹,在每一次組件更新時,在此react會通過其diff演算法比較更新前後的新舊dom樹,比較之後,找到最小的有差異的dom節點,並會重新渲染;

9)componentDidUpdate: 組件更新完成後立即調用,可以拿到更新前的props和state;

10)componentWillUnmount: 組件卸載,可以做一些清理工作。如:clear組件中的setTimeout、setInterval;移除組件中的監聽removeEventListener

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.