1. 程式人生 > >React 快速入門-React 生命週期

React 快速入門-React 生命週期

博主的參考資料

React 生命週期-快樂的開發者

菜鳥教程-React 元件生命週期

具體例項結果

操作為初始化元件,更新一次 state 中包含的值,移除該元件

結果

測試程式碼

html 檔案

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0,minimum-scale=1.0"
/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>生命週期測試</title> </head> <body> <div id="root"></div> //此處引用打包後的 js 檔案 </body> </html>

下方程式碼內容為,往 html 中 id 為 “root” 的 div 標籤新增 react 自定義元件 “ComponentTemplate “,並延遲 5 秒後移除,”ComponentTemplate ” 元件中顯示一個 布林值,單擊後取反。

打包 js 前的檔案 1

import React from 'react';
import ReactDOM from 'react-dom';
import ComponentTemplate from "./component/ComponentTemplate.jsx";

const main = <ComponentTemplate 初始化值={"預設值"}/>;
ReactDOM.render(main, document.getElementById('root'));

window.setTimeout(() => {
 ReactDOM.unmountComponentAtNode(document
.getElementById('root')); }, 5000)
;

打包 js 前的檔案 2

import React from "react";
import ReactDOM from "react-dom";

class ComponentTemplate extends React.Component{
    constructor(props) {
        super(props)
        this.state = {
            show: true
        }
        console.log("constructor----------");
        console.log(JSON.stringify(props));
    }

    componentWillMount() {
        console.log("componentWillMount----------");
    }

    componentWillReceiveProps(nextProps, nextContext) {
        console.log("componentWillReceiveProps----------");
        console.log("nextProps:" + JSON.stringify(nextProps));
        console.log("nextContext:" + JSON.stringify(nextContext));
    }

    shouldComponentUpdate(nextProps, nextState, nextContext) {
        console.log("shouldComponentUpdate----------");
        console.log("nextProps:" + JSON.stringify(nextProps));
        console.log("nextState:" + JSON.stringify(nextState));
        console.log("nextContext:" + JSON.stringify(nextContext));
        return true;// 返回 false 會阻止實際 dom 節點更新
    }

    render() {
        return (
            <div onClick={() => {
                this.setState({show: !this.state.show});
            }}>
                {JSON.stringify(this.state.show)}
            </div>
        );
    }

    componentDidMount() {
        //初始化時第一次渲染完實際 dom 時呼叫
        console.log("componentDidMount----------");
        console.log("");
    }

    componentDidUpdate(prevProps, prevState, snapshot) {
        //除了初始化時第一次渲染完實際 dom,之後每次完成實際 dom 渲染時呼叫
        console.log("componentDidUpdate----------");
        console.log("prevProps:" + JSON.stringify(prevProps));
        console.log("prevState:" + JSON.stringify(prevState));
        console.log("snapshot:" + JSON.stringify(snapshot));
        console.log("");
    }

    componentWillUnmount() {
        //元件被移除的前一步執行(可用於清除監聽事件等)
        console.log("componentWillUnmount----------");
    }
}

export default ComponentTemplate;