国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

簡(jiǎn)述 React 組件生命周期

qpal / 2976人閱讀

摘要:這個(gè)階段只有一個(gè)方法,該方法在整個(gè)生命周期內(nèi)調(diào)用且僅調(diào)用一次。在這里進(jìn)行一些相關(guān)的銷(xiāo)毀操作,比如撤銷(xiāo)定時(shí)器,事件監(jiān)聽(tīng)等等。

詳解 React 生命周期

整個(gè) React 生命周期有3個(gè)階段:創(chuàng)建、更新、卸載,每個(gè)階段有對(duì)應(yīng)的工作和方法,我們可以看下面這個(gè)經(jīng)典的圖研究一下:

第一階段

這是虛擬 DOM 創(chuàng)建的階段,會(huì)依次執(zhí)行 5 個(gè)方法,這 5 個(gè)方法中除了 render 方法,其余四個(gè)方法在整個(gè)生命周期中只調(diào)用 1 次,而且一定會(huì)調(diào)用 1 次:

getDefaultProps()

這個(gè)方法在組件實(shí)例創(chuàng)建前,也就是構(gòu)造函數(shù)執(zhí)行前執(zhí)行,獲取父組件傳來(lái)的參數(shù),你可以在這里編輯參數(shù)并返回新的參數(shù)作為 props

getInitalState()

組件創(chuàng)建的一開(kāi)始會(huì)調(diào)用這個(gè)方法初始化組件的 state

componentWillMount()

在組件 render 之前執(zhí)行該方法,可用來(lái)修改 state。React 先調(diào)用父組件的這個(gè)函數(shù),再調(diào)用子組件的這個(gè)函數(shù)

render()

開(kāi)始組件渲染函數(shù),返回一個(gè)只有一個(gè)根節(jié)點(diǎn)的虛擬 DOM。該函數(shù)中不能同步的修改組件的狀態(tài)(state)。

componentDidMount()

在 render 渲染之后,通知組件已經(jīng)加載完成。React 先調(diào)用子組件的這個(gè)函數(shù),再調(diào)用父組件的這個(gè)函數(shù)。從這個(gè)函數(shù)開(kāi)始,該組件就可以和其他框架交互了。比如設(shè)置計(jì)時(shí)器或者發(fā)起網(wǎng)絡(luò)請(qǐng)求。

第二階段

此時(shí)該組件已經(jīng)進(jìn)入了穩(wěn)定運(yùn)行階段,這個(gè)階段組件可以處理用戶交互,或者接收事件更新界面。以下方法在整個(gè)生命周期中可以執(zhí)行很多次,也可以一次也不執(zhí)行。

componentWillReceiveProps()

當(dāng)父容器中對(duì)應(yīng)的參數(shù)改變將會(huì)調(diào)用子組件的該函數(shù)。新的 props 將會(huì)作為參數(shù)傳遞進(jìn)來(lái),老的 props 可以根據(jù) this.props 來(lái)獲取。我們可以在該函數(shù)中對(duì)state作一些處理。并且在該函數(shù)中更新 state 不會(huì)發(fā)生二次渲染

shouldComponentUpdate()

該函數(shù)傳遞過(guò)來(lái)兩個(gè)參數(shù),新的 state 和新的 props。state 和 props 的改變都會(huì)調(diào)到該函數(shù)。該函數(shù)主要對(duì)傳遞過(guò)來(lái)的 nextProps 和 nextState 作判斷。如果返回 true 則重新渲染(默認(rèn)都是返回 true),如果返回 false 則不重新渲染。在某些特定條件下,我們可以根據(jù)傳遞過(guò)來(lái)的 props 和 state 來(lái)選擇更新或者不更新,從而提高效率。

componentWillUpdate()

與 componentWillMount 方法類(lèi)似,在 render 渲染之前被調(diào)用。組件上會(huì)接收到新的 props 或者 state。這個(gè)函數(shù)調(diào)用之后,就會(huì)把 nextProps 和 nextState 分別設(shè)置到 this.props 和 this.state 中。

componentDidUpdate()

與 componentDidMount 方法類(lèi)似,在 render 渲染之后被調(diào)用,真實(shí) DOM 生成之后調(diào)用該函數(shù)。傳遞過(guò)來(lái)的參數(shù)是之前的 props 和 state。

第三階段

這就是消亡的階段,主要進(jìn)行內(nèi)存的清理和釋放的工作。這個(gè)階段只有一個(gè)方法,該方法在整個(gè)生命周期內(nèi)調(diào)用且僅調(diào)用一次。

componentWillUnmount()

當(dāng)組件要被從界面上移除的時(shí)候,就會(huì)調(diào)用 componentWillUnmount。在這里進(jìn)行一些相關(guān)的銷(xiāo)毀操作,比如撤銷(xiāo)定時(shí)器,事件監(jiān)聽(tīng)等等。

觸發(fā) render 的幾種情況

這里我們僅考慮 shouldComponentUpdate 沒(méi)有被修改,始終返回的是 true

首次渲染,即 Initial Render

調(diào)用this.setState (不是每次調(diào)用 setState 都會(huì)觸發(fā),react 會(huì)優(yōu)化,比如 antd 的 input 組件)

父組件發(fā)生更新,通常是修改的子組件的 props

如果父組件觸發(fā)了 render, 子組件當(dāng)然也會(huì)相應(yīng)觸發(fā) render

調(diào)用 this.forceUpdate()

一個(gè)簡(jiǎn)單的示例
import React from "react";
import ReactDOM from "react-dom";
import style from "./font.css";
import "./index.less";

class Parent extends React.Component{
  constructor(props) {
    super(props);
    this.state = {
      willRender: true,
      prop: 1
    };
  }

  render(){
    return (
      
{ this.state.willRender && }
); } } class Child extends React.Component { constructor(props) { super(props); this.state = { curr: 0 }; } getDefaultProps(){ console.log("getDefaultProps"); } getInitalState(){ console.log("getInitalState"); } componentWillMount(){ console.log("componentWillMount"); } componentDidMount(){ console.log("componentDidMount"); } componentWillReceiveProps(){ console.log("componentWillReceiveProps"); } shouldComponentUpdate(){ console.log("shouldComponentUpdate"); return true; } componentWillUpdate(){ console.log("componentWillUpdate"); } componentDidUpdate(){ console.log("componentDidUpdate"); } componentWillUnmount(){ console.log("componentWillUnmount"); } render() { console.log("render") return (
); } } ReactDOM.render( , document.getElementById("root") );

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/97603.html

相關(guān)文章

  • 前端面試題總結(jié)(js、html、小程序、React、ES6、Vue、算法、全棧熱門(mén)視頻資源)

    摘要:并總結(jié)經(jīng)典面試題集各種算法和插件前端視頻源碼資源于一身的文檔,優(yōu)化項(xiàng)目,在瀏覽器端的層面上提升速度,幫助初中級(jí)前端工程師快速搭建項(xiàng)目。 本文是關(guān)注微信小程序的開(kāi)發(fā)和面試問(wèn)題,由基礎(chǔ)到困難循序漸進(jìn),適合面試和開(kāi)發(fā)小程序。并總結(jié)vue React html css js 經(jīng)典面試題 集各種算法和插件、前端視頻源碼資源于一身的文檔,優(yōu)化項(xiàng)目,在瀏覽器端的層面上提升速度,幫助初中級(jí)前端工程師快...

    pumpkin9 評(píng)論0 收藏0
  • 前端面試題總結(jié)(js、html、小程序、React、ES6、Vue、算法、全棧熱門(mén)視頻資源)

    摘要:并總結(jié)經(jīng)典面試題集各種算法和插件前端視頻源碼資源于一身的文檔,優(yōu)化項(xiàng)目,在瀏覽器端的層面上提升速度,幫助初中級(jí)前端工程師快速搭建項(xiàng)目。 本文是關(guān)注微信小程序的開(kāi)發(fā)和面試問(wèn)題,由基礎(chǔ)到困難循序漸進(jìn),適合面試和開(kāi)發(fā)小程序。并總結(jié)vue React html css js 經(jīng)典面試題 集各種算法和插件、前端視頻源碼資源于一身的文檔,優(yōu)化項(xiàng)目,在瀏覽器端的層面上提升速度,幫助初中級(jí)前端工程師快...

    Carson 評(píng)論0 收藏0
  • 前端面試題總結(jié)(js、html、小程序、React、ES6、Vue、算法、全棧熱門(mén)視頻資源)

    摘要:并總結(jié)經(jīng)典面試題集各種算法和插件前端視頻源碼資源于一身的文檔,優(yōu)化項(xiàng)目,在瀏覽器端的層面上提升速度,幫助初中級(jí)前端工程師快速搭建項(xiàng)目。 本文是關(guān)注微信小程序的開(kāi)發(fā)和面試問(wèn)題,由基礎(chǔ)到困難循序漸進(jìn),適合面試和開(kāi)發(fā)小程序。并總結(jié)vue React html css js 經(jīng)典面試題 集各種算法和插件、前端視頻源碼資源于一身的文檔,優(yōu)化項(xiàng)目,在瀏覽器端的層面上提升速度,幫助初中級(jí)前端工程師快...

    muzhuyu 評(píng)論0 收藏0
  • 前端面試題總結(jié)(js、html、小程序、React、ES6、Vue、算法、全棧熱門(mén)視頻資源)

    摘要:并總結(jié)經(jīng)典面試題集各種算法和插件前端視頻源碼資源于一身的文檔,優(yōu)化項(xiàng)目,在瀏覽器端的層面上提升速度,幫助初中級(jí)前端工程師快速搭建項(xiàng)目。 本文是關(guān)注微信小程序的開(kāi)發(fā)和面試問(wèn)題,由基礎(chǔ)到困難循序漸進(jìn),適合面試和開(kāi)發(fā)小程序。并總結(jié)vue React html css js 經(jīng)典面試題 集各種算法和插件、前端視頻源碼資源于一身的文檔,優(yōu)化項(xiàng)目,在瀏覽器端的層面上提升速度,幫助初中級(jí)前端工程師快...

    li21 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

qpal

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<