成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

react生命周期分享,無論你是否看過?。?!

Cc_2011 / 1441人閱讀

摘要:此方法必須返回否則報(bào)錯(cuò)則渲染,則不渲染在此聲明周期中可以考慮是否需要進(jìn)行渲染避免不必要的性能浪費(fèi)如果返回,那么將被完全跳過,直到下一個(gè)狀態(tài)改變。

一、基礎(chǔ)

先來介紹一個(gè)生命周期的定義:
1)componentWillMount(){}

// Mounting  安裝階段 
// 在客戶端和服務(wù)器上,在初始渲染發(fā)生之前立即調(diào)用一次 如果在這個(gè)方法中調(diào)用setState,
// render()將看到更新的狀態(tài),并且只會(huì)執(zhí)行一次,盡管狀態(tài)改變。

2)componentDidMount(){}

// Mounting  安裝階段 
// 調(diào)用一次,只在客戶端(不在服務(wù)器上),在初始渲染發(fā)生后立即
// 子組件的componentDidMount()方法在父組件的componentDidMount()方法之前被調(diào)用
// setTimeout  setInterval   AJAX 在此之行,強(qiáng)烈建議

3)componentWillReceiveProps(nextProps){}

// Updating 更新階段
// 在組件接收新props時(shí)調(diào)用。初始渲染不調(diào)用此方法。
// 老的props可以用this.props  新值就用nextProps查看
// 在此函數(shù)中調(diào)用this.setState()不會(huì)觸發(fā)附加的渲染。

4)shouldComponentUpdate(nextProps, nextState){}

// Updating 更新階段
// 當(dāng)正在接收新的道具或狀態(tài)時(shí),在渲染之前調(diào)用。
// 此方法必須返回false or true 否則報(bào)錯(cuò)  true則渲染,false則不渲染!在此聲明周期中可以考慮是否需要進(jìn)行渲染!避免不必要的性能浪費(fèi)
// 如果shouldComponentUpdate返回false,那么render()將被完全跳過,直到下一個(gè)狀態(tài)改變。此外,不會(huì)調(diào)用componentWillUpdate和componentDidUpdate。
// 默認(rèn)返回true
// 如果性能是一個(gè)瓶頸,特別是有幾十個(gè)或幾百個(gè)組件,請使用shouldComponentUpdate來加快您的應(yīng)用程序。
// return true or false

5) componentWillUpdate(nextProps, nextState){}

// Updating 更新階段
// 當(dāng)正在接收新的props或state時(shí)立即調(diào)用。初始渲染不調(diào)用此方法
// 您不能在此方法中使用this.setState()。如果您需要更新state以響應(yīng)prop更改,請改用componentWillReceiveProps。

6)componentDidUpdate(nextProps, nextState){}

// Updating  更新階段
// 在組件的更新刷新到DOM后立即調(diào)用。初始渲染不調(diào)用此方法。
// 當(dāng)組件已更新時(shí),使用此操作作為DOM操作的機(jī)會(huì)

7)componentWillUnmount(){}

// Unmounting  卸載階段
// 在組件從DOM卸載之前立即調(diào)用。
// 在此方法中執(zhí)行任何必要的清理,例如使計(jì)時(shí)器無效或清除在componentDidMount中創(chuàng)建的任何DOM元素。clearInterval or destroy 

二、生命周期的執(zhí)行順序

舉例:只有一個(gè)組件,里面有一個(gè)onClick事件改編一個(gè)state

刷新頁面:

a、componentWillMount--->    // 可以更改state
            render()---->
                componentDidMount // 周期結(jié)束
                

觸發(fā)onClick事件:(前提只有事件中出發(fā)setState,其他中沒有)

shouldComponentUpdate中 return true
    shouldComponentUpdate-->
            componentWillUpdate-->
                    render()-->
                            componentDidUpdate //周期結(jié)束
    
shouldComponentUpdate中 return false
            shouldComponentUpdate //周期結(jié)束

上面只是一個(gè)很簡單的例子講述了周期的執(zhí)行順序,大家可以根據(jù)順序去做相應(yīng)的操作,當(dāng)然在componentWillUpdatecomponentDidUpdate這兩個(gè)周期中不可以使用this.setState,需要使用此方法可以在componentWillReceiveProps中去操作。周期中可能進(jìn)行的操作在上面的定義中以解釋。

舉例:父、子組件,父組件和上述相同,字段件只是一個(gè)純ui組件沒有任何的操作,接受父組件傳來的props(父組件的click可控制props的內(nèi)容)。

刷新頁面:

父componentWillMount--->父render()---->子componentWillMount--->子render()--->子componentDidMount--->父componentDidMount

觸發(fā)onClick事件:

子組件shouldComponentUpdate 返回的是false
    父shouldComponentUpdate-->父componentWillUpdate-->父render()-->父componentDidUpdate
子組件shouldComponentUpdate 返回的是true
    父shouldComponentUpdate-->父componentWillUpdate-->父render()--->子componentWillReceiveProps--->子shouldComponentUpdate--->子componentWillUpdate---->子render()--->子componentDidUpdate--->父componentDidUpdate

componentWillUnmount階段
當(dāng)你的組件關(guān)閉的時(shí)候,例如跳轉(zhuǎn)頁面的時(shí)候,此周期執(zhí)行一次??赡茏龅牟僮髟谏厦娴亩x。

給出一段代碼:(就是上述的子組件)

import React, { Component } from "react";

class Another extends Component {
    constructor(props) {
        super(props);
        this.state = {
            son:"子組件"
        }
    }
    componentWillMount() {
    console.log("子組件--Mounting-componentWillMount",this.state.son)
  }
  componentDidMount() {
    console.log("子組件--Mounting-componentDidMount",this.state.son)
  }
  componentWillReceiveProps(nextProps) {
    console.log("子組件--Updating-componentWillReceiveProps")
  }
  shouldComponentUpdate(nextProps, nextState) {
    console.log("子組件--Updating-shouldComponentUpdate")
    return true
  }
  componentWillUpdate(nextProps, nextState) {
    console.log("子組件--Updating-componentWillUpdate")
  }
  componentDidUpdate(nextProps, nextState) {
    console.log("子組件--Updating-componentDidUpdate")
  }
  componentWillUnmount() {
  }
    render() {
        return(
            
我是子組件--我是子組件--我是子組件{this.props.name}
) } } export default Another;

根據(jù)上面的代碼,說一個(gè)組件實(shí)例的初始化的方法過程

1)`getInitialState` 設(shè)置初始狀態(tài)值,(掉調(diào)用一次),可使用setState方法更改狀態(tài)

es6語法則在這是用:

    constructor(props) {
        super(props);
        this.displayName="name";
        this.事件名=this.事件名.bind(this);//綁定事件的this,這樣初始化只綁定一次,如果在render中邦定,則只要render就邦定一次。
        this.state = {
            son:"子組件"
        }
    }
    static propTypes = { 
        value:PropTypes.string,
        //類型的種類object string array func number bool any
    }
    static defaultProps={ 
        value:"1"
    }
2)`getDefaultProps `設(shè)置初始props的值,不可以更改
es6語法參照上面的 static defaultProps

3)`propTypes `驗(yàn)證傳遞給組件的props
es6語法上述 static propTypes   

4)`displayName `用于degbug調(diào)試消息,如果不寫,JSX將從變量賦值中推斷出類的displayName,es6語法如上述代碼片段中,例如下面
// Input (JSX):
var Nav = React.createClass({ });
// Output (JS):
var Nav = React.createClass({displayName: "Nav", });
執(zhí)行的順序就是上述代碼片段的順序!

三、總結(jié)

詳細(xì)了解生命周期的特性,有助于處理數(shù)據(jù),更好的節(jié)約性能。本人一點(diǎn)點(diǎn)小的見解,還望各位路過的大神,賞臉批評指正!

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/82038.html

相關(guān)文章

  • 前端面試總結(jié)(at, md)

    摘要:面試官比較著急了,跟我溝通的時(shí)候,我才知道返回值不一定非要跟原生的一樣。騰訊一面平常開發(fā)怎么設(shè)計(jì)組件的。總結(jié)騰訊面試的感覺就是,沒有那么正式,都是部門的技術(shù)直接聯(lián)系的你,然后二面就是部門負(fù)責(zé)人了,決定了是否入職。 引入 面試過去了這么久,把八月份面試題和總結(jié)發(fā)一下吧,雖然年底大家可能都不換工作~ 還是可以看看的。 關(guān)于面試,引用葉老濕的一句話。你的簡歷是自己工作的答卷,項(xiàng)目經(jīng)歷是你給面...

    zhunjiee 評論0 收藏0
  • 為什么 React16 對開發(fā)人員來說是一種福音

    摘要:就像人們對更新移動(dòng)應(yīng)用程序和操作系統(tǒng)感到興奮一樣,開發(fā)人員也應(yīng)該對更新框架感到興奮。錯(cuò)誤邊界是一種組件。注意將作為值傳遞進(jìn)去并不會(huì)導(dǎo)致使用。如果兩者不同,則返回一個(gè)用于更新狀態(tài)的對象,否則就返回,表示不需要更新狀態(tài)。 就像人們對更新移動(dòng)應(yīng)用程序和操作系統(tǒng)感到興奮一樣,開發(fā)人員也應(yīng)該對更新框架感到興奮。不同框架的新版本具有新特性和開箱即用的技巧。 下面是將現(xiàn)有應(yīng)用程序從 React 15...

    BicycleWarrior 評論0 收藏0
  • 【譯】為什么 React16 對開發(fā)人員來說是一種福音

    摘要:譯者前端小智原文就像人們對更新移動(dòng)應(yīng)用程序和操作系統(tǒng)感到興奮一樣,開發(fā)人員也應(yīng)該對更新框架感到興奮。錯(cuò)誤邊界是一種組件。注意將作為值傳遞進(jìn)去并不會(huì)導(dǎo)致使用。如果兩者不同,則返回一個(gè)用于更新狀態(tài)的對象,否則就返回,表示不需要更新狀態(tài)。 譯者:前端小智 原文:medium.freecodecamp.org/why-react16… 就像人們對更新移動(dòng)應(yīng)用程序和操作系統(tǒng)感到興奮一樣,開發(fā)人員也應(yīng)...

    kbyyd24 評論0 收藏0
  • 10分鐘了解 react 引入的 Hooks

    摘要:最近官方在大會(huì)上宣布內(nèi)測將引入。所以我們有必要了解,以及由此引發(fā)的疑問。在進(jìn)一步了解之前,我們需要先快速的了解一些基本的的用法。如何解決狀態(tài)有關(guān)的邏輯的重用和共享問題。 showImg(https://segmentfault.com/img/remote/1460000016886798?w=1500&h=750); 大家好,我是谷阿莫,今天要將的是一個(gè)...,哈哈哈,看到這個(gè)題我就...

    Lucky_Boy 評論0 收藏0
  • react創(chuàng)建組建的四種方式

    摘要:原由寫這篇文章主要是為了增強(qiáng)自己的記憶,同時(shí)也是為了分享一下我們常用的創(chuàng)建組建的方法,主要是四種,啟發(fā)來自于不知的博客呀,有興趣的人可以去看看他的博客敘述我們在用的時(shí)候考慮最多的其實(shí)就是如何策劃組建的劃分,組建的嵌套,能夠做到更省時(shí)省力。 原由:寫這篇文章主要是為了增強(qiáng)自己的記憶,同時(shí)也是為了分享一下我們常用的創(chuàng)建組建的方法,主要是四種(createClass, component, ...

    XanaHopper 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<