溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

react生命周期的三個過程實例分析

發(fā)布時間:2022-06-29 09:25:43 來源:億速云 閱讀:126 作者:iii 欄目:web開發(fā)

今天小編給大家分享一下react生命周期的三個過程實例分析的相關(guān)知識點,內(nèi)容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

react生命周期的三個過程:1、掛載期,也叫實例化期,是一個組件實例初次被創(chuàng)建的過程;2、更新期,也被稱為存在期,是組件在創(chuàng)建之后再次渲染的過程;3、卸載期,也被稱為銷毀期,是組件在使用完后被銷毀的過程。

本教程操作環(huán)境:Windows10系統(tǒng)、react17.0.1版、Dell G3電腦。

react生命周期的三個過程

React的生命周期從廣義上分為三個階段:掛載、渲染、卸載

從出生到成長,最后到死亡,這個過程的時間可以理解為生命周期。React的生命周期同理也是這么一個過程。

React的生命周期分為三個階段:掛載期(也叫實例化期)、更新期(也叫存在期)、卸載期(也叫銷毀期)。在每個周期中React都提供了一些鉤子函數(shù)。

生命周期的描述如下:

  • 掛載期:一個組件實例初次北創(chuàng)建的過程。

  • 更新期:組件在創(chuàng)建后再次渲染的過程。

  • 卸載期:組件在使用完后被銷毀的過程。

組件的掛載:

組件在首次創(chuàng)建后,進行第一次的渲染為掛載期。掛載期有的一些方法會被依次觸發(fā),列舉如下:

  • constructor(構(gòu)造函數(shù),初始化狀態(tài)值)

  • getInitialState(設(shè)置狀態(tài)機)

  • getDefaultProps(獲取默認的props)

  • UNSAFE_componentWillMount(首次渲染前執(zhí)行)

  • render(渲染組件)

  • componentDidMount(render渲染之后執(zhí)行的操作)

//組件掛載import React from 'react';import ReactDOM from 'react-dom';class HelloWorld extends React.Component{
    constructor(props) {
        super(props);
        console.log("1,構(gòu)造函數(shù)");
        this.state={};
        console.log("2,設(shè)置狀態(tài)機");
    }
    static defaultProps={
        name:"React",
    }
    UNSAFE_componentWillMount(nextProps, nextState, nextContext) {
        console.log("3,完成首次渲染前調(diào)用");
    }
    render() {
        console.log("4,組件進行渲染");
        return (
            <p>
                <p>{this.props.name}</p>
            </p>
        )
    }
    componentDidMount() {
        console.log("5,componentDidMount render渲染后的操作")
    }}ReactDOM.render(<HelloWorld />, document.getElementById('root'));

react生命周期的三個過程實例分析

組件的更新:
組件更新,指的是在組件初次渲染后,進行了組件狀態(tài)的改變。React在生命周期中的更新過程包括以下幾個方法:

  • UNSAFE_componentWillReceiveProps :當父組件更新子組件state時,該方法會被調(diào)用。

  • shouldComponentUpdate : 該方法決定組件state或props的改變是否需要重新渲染組件。

  • UNSAFE_componentWillUpdate : 在組件接受新的state或者props時,即將進行重新渲染前調(diào)用該方法,和UNSAFE_componentWillMount方法類似。

  • componentDidUpdate : 在組件重新渲染后調(diào)用該方法,和componentDidMount方法類似。

//組件更新class HelloWorldFather extends React.Component{
    constructor(props) {
        super(props);
        this.updateChildProps=this.updateChildProps.bind(this);
        this.state={  //初始化父組件
            name:"React"
        }
    }
    updateChildProps(){  //更新父組件state
        this.setState({
            name:"Vue"
        })
    }
    render() {
        return (
            <p>
                <HelloWorld name={this.state.name} />  {/*父組件的state傳遞給子組件*/}
                <button onClick={this.updateChildProps}>更新子組件props</button>
            </p>
        )
    }}class HelloWorld extends React.Component{
    constructor(props) {
        super(props);
        console.log("1,構(gòu)造函數(shù)");
        console.log("2,設(shè)置狀態(tài)機")
    }
    UNSAFE_componentWillMount() {
        console.log("3,完成首次渲染前調(diào)用");
    }
    UNSAFE_componentWillReceiveProps(nextProps, nextContext) {
        console.log("6,父組件更新子組件時調(diào)用該方法");
    }
    shouldComponentUpdate(nextProps, nextState, nextContext) {
        console.log("7,決定組件props或者state的改變是否需要重新進行渲染");
        return true;
    }
    UNSAFE_componentWillUpdate(nextProps, nextState, nextContext) {
        console.log("8,當接收到新的props或state時,調(diào)用該方法");
    }
    render() {
        console.log("4,組件進行渲染");
        return (
            <p>
                <p>{this.props.name}</p>
            </p>
        )
    }
    componentDidMount() {
        console.log("5,componentDidMount render后的操作");
    }
    componentDidUpdate(prevProps, prevState, snapshot) {
        console.log("9,組件被重新選然后調(diào)用該方法");
    }}ReactDOM.render(<HelloWorldFather />,document.getElementById("root"));

react生命周期的三個過程實例分析
點擊“更新子組件props”后:
react生命周期的三個過程實例分析

組件的卸載:
生命周期的最后一個過程為組件卸載期,也稱為組件銷毀期。該過程主要涉及一個 方法,即componentWillUnmount,當組件從DOM樹刪除的時候調(diào)用該方法。

//組件卸載class HelloWorldFather extends React.Component{
    constructor(props) {
        super(props);
        this.updateChildProps=this.updateChildProps.bind(this);
        this.state={  //初始化父組件
            name:"React"
        }
    }
    updateChildProps(){  //更新父組件state
        this.setState({
            name:"Vue"
        })
    }
    render() {
        return (
            <p>
                <HelloWorld name={this.state.name} />  {/*父組件的state傳遞給子組件*/}
                <button onClick={this.updateChildProps}>更新子組件props</button>
            </p>
        )
    }}class HelloWorld extends React.Component{
    constructor(props) {
        super(props);
        console.log("1,構(gòu)造函數(shù)");
        console.log("2,設(shè)置狀態(tài)機")
    }
    UNSAFE_componentWillMount() {
        console.log("3,完成首次渲染前調(diào)用");
    }
    UNSAFE_componentWillReceiveProps(nextProps, nextContext) {
        console.log("6,父組件更新子組件時調(diào)用該方法");
    }
    shouldComponentUpdate(nextProps, nextState, nextContext) {
        console.log("7,決定組件props或者state的改變是否需要重新進行渲染");
        return true;
    }
    UNSAFE_componentWillUpdate(nextProps, nextState, nextContext) {
        console.log("8,當接收到新的props或state時,調(diào)用該方法");
    }
    delComponent(){  //添加卸載方法
        ReactDOM.unmountComponentAtNode(document.getElementById("root"));
    }
    render() {
        console.log("4,組件進行渲染");
        return (
            <p>
                <p>{this.props.name}</p>
                <button onClick={this.delComponent}>卸載組件</button>  {/*聲明卸載按鈕*/}
            </p>
        )
    }
    componentDidMount() {
        console.log("5,componentDidMount render后的操作");
    }
    componentDidUpdate(prevProps, prevState, snapshot) {
        console.log("9,組件被重新選然后調(diào)用該方法");
    }
    componentWillUnmount() {  //組件卸載后執(zhí)行
        console.log("10,組件已被卸載");
    }}ReactDOM.render(<HelloWorldFather />,document.getElementById("root"));

react生命周期的三個過程實例分析
點擊卸載按鈕后:
react生命周期的三個過程實例分析

總覽組件生命周期:
react生命周期的三個過程實例分析

以上就是“react生命周期的三個過程實例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI