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

資訊專欄INFORMATION COLUMN

[譯]React 的生命周期的使用場景

klinson / 379人閱讀

摘要:譯的生命周期的使用場景原文鏈接作者翻譯上名這個圖片,就是組件的生命周期,從形成到銷毀的過程。這并不意味著沒有用。最常見的用例更新以響應(yīng)或更改。是否可以調(diào)用總結(jié)在理想的世界中,我們不會使用生命周期方法。

[譯]React 的生命周期的使用場景

原文鏈接:React Lifecycle Methods- how and when to use them

作者:Scott DomesFollow Front-End/Mobile Developer @ MuseFind.
翻譯:johannlai

上名這個圖片,就是 React 組件的生命周期,從形成 (pre-mounting)到銷毀 (unmounting)的過程。

React 的優(yōu)雅之處就在于,它把復(fù)雜的 UI 分解成很小的部分。 我們不僅僅可以劃分我們的應(yīng)用,而且我們還可以定制我們每一個組件。

通過組件的生命周期方法,我們可以控制當(dāng)UI的每個微小部分渲染,更新,考慮重新渲染,然后完全消失時會發(fā)生什么事情。

讓我們開始吧!

componentWillMount

您的組件將很快就會出現(xiàn)在屏幕上面。這個大塊的渲染功能與其所有精美的 JSX 一樣,即將被調(diào)用。那你想做什么?

答案是... 可能不是很多。 但是 componentWillMount 的確用處不會太大。

關(guān)于 componentWillMount 的事情是,沒有組件可以玩,所以你不能做任何涉及DOM的事情。(譯者:因為還沒渲染組件)

此外,自從您的組件的構(gòu)造函數(shù)( constructor )被調(diào)用以來,沒有任何變化,但是,無論如何,您應(yīng)該在其中設(shè)置組件的默認(rèn)配置。

  export default calss Sidebar extends Component {
    constructor(props) {
      super(props)
      this.state = {
        analyticsOpen: false,
        requirementsOpen: false,
        barndInfoOpen: false
      }
    }
  }

現(xiàn)在您的組件處于默認(rèn)位置,幾乎所有的東西都應(yīng)該由其余的組件代碼來處理,而不需要額外的生命周期方法。

例外是只能在運行時完成的任何設(shè)置,說白了也就是連接到外部 API 。舉個栗子,如果您的應(yīng)用程序使用Firebase,則需要在應(yīng)用程序首次掛載(mounting)時進行設(shè)置。

但關(guān)鍵是,這樣的配置應(yīng)該在應(yīng)用程序的最高級別組件(根組??件)。 這意味著99%的組件應(yīng)該不能使用 componentWillMount

您可能會看到使用componentWillMount的人啟動AJAX調(diào)用來加載組件的數(shù)據(jù)。 千萬不要這樣做,我們馬上就會聊到這個。

接下來,更有用的方法是:
最常見的用例: 您的根組件中的應(yīng)用程序配置。
可以調(diào)用setState:不要。改用默認(rèn)狀態(tài)( default state )。

componentDidMount

現(xiàn)在我們在說話您的組件在那里,掛載了并準(zhǔn)備好使用了。怎么辦?

這里是您加載數(shù)據(jù)的位置。我會讓 Tyler McGinnis 解釋為什么:

You can’t guarantee the AJAX request won’t resolve before the component mounts. If it did, that would mean that you’d be trying to setState on an unmounted component, which not only won’t work, but React will yell at you for. Doing AJAX in componentDidMount will guarantee that there’s a component to update.

您不能保證在組件掛載之前,AJAX請求將 resolve 。如果這樣做,那意味著你會嘗試在一個未掛載的組件上設(shè)置StState,這不僅不會起作用,反而 React 會對你大喊大叫。在componentDidMount中執(zhí)行AJAX將保證有一個要更新的組件。

ComponentDidMount 也可以在做很多你在沒有組件的時候不能做的事情。 下面舉幾個栗子:

繪制您剛剛渲染的元素

從元素集合初始化 masonry 網(wǎng)格布局

增加事件監(jiān)聽器

基本上,你可以在這里做任何剛剛因為沒有 DOM 而不能做的設(shè)置,并且可以獲取你所需要的全部數(shù)據(jù)。

最常見的用例: 啟動AJAX調(diào)用,以加載組件的數(shù)據(jù)。
可以調(diào)用setState:是的。

componentWillReceiveProps

我們的組成部分做得很好,突然之間,一大堆新的 props 到達了,使到組件處于混亂狀態(tài)。

很有可能一些由父組件的componentDidMount加載的數(shù)據(jù)終于到達,并被傳遞下來。

在我們的組件對新的 props 進行任何操作之前,將調(diào)用componentWillReceiveProps,并將下一props 作為參數(shù)。

componentWillReceiveProps

現(xiàn)在,我們正在處于一個很有趣的地方,我們可以訪問下一個 props (通過nextProps)和我們當(dāng)前的 props (通過this.props)。

下面這些是我們在componentWillReceiveProps 中需要做的:

檢查哪些props 會改變(使用componentWillReceiveProps的大警告 - 有時它什么也沒有改變時被調(diào)用; React 只是想做一個檢查)

如果props 會以重要的方式改變props,就行事。

下面是一個例子。假設(shè)我們在上面提到,我們有一個 元素。假設(shè)我們根據(jù)this.props.percent 繪制一個很好的圓形圖形。

ps` ,如果百分比發(fā)生變化,我們想重新繪制網(wǎng)格。以下是代碼:

  componentWillReceiveProps( nextProp ) {
    if(this.props.percent !== nextProps.percent) {
      this.setUpCirCle(nextProps.percent)
    }
  }

注意:在初始渲染時不調(diào)用 componentWillReceiveProps 。
我的意思是在技術(shù)上,組件正在接收props,但沒有任何舊的props要比較,所以...不算。

最常見的用例:根據(jù)特定的props,更改來觸發(fā)狀態(tài)(state)轉(zhuǎn)換。
是否可以調(diào)用setState: Yes

shouldComponentUpdate

現(xiàn)在我們的組件越來越緊張了。

我們有新的props。典型的React教條說,當(dāng)一個組件接收到新的props或新的state時,它應(yīng)該更新。

但是我們的組件有點焦慮,首先要求許可。

這是我們所需要的 —— shouldComponentUpdate方法,以 nextProps 為第一個參數(shù),nextState是第二個參數(shù):

shouldComponentUpdate(nextProps, nextState) {
  return this.props.engagement !== nextProps,engagement
    || nextState.input !== this.state.input
}

shouldComponentUpdate應(yīng)該總是返回一個布爾值 —— 就像這個問題的答案
--> “我可以渲染嗎?”
--> 是的,小組件,你可以去渲染。

默認(rèn)情況下它總是返回true

但是,如果您擔(dān)心浪費渲染
其實,shouldComponentUpdate是提高性能的好地方。

我以這種方式寫了一篇關(guān)于使用shouldComponentUpdate的文章 - 看看:

How to Benchmark React Components: The Quick and Dirty Guide

在這篇文章中,我們談?wù)撘粋€有很多fields的表格。問題是,當(dāng)表重新渲染時,每個字段也將重新渲染,速度很慢,效率很低。

ShouldComponentUpdate允許我們說:只有當(dāng)所關(guān)心的props的改變的時候才更新!

但請記住,如果您設(shè)置并忘記它可能會導(dǎo)致重大問題,因為您的React組件將無法正常更新。所以謹(jǐn)慎使用。

最常見的用例: 當(dāng)您的組件 re-render (重新渲染)時,完全控制。
是否可以調(diào)用setState: No

componentWillUpdate

哇,什么過程現(xiàn)在我們承諾更新。"希望我在重新渲染之前先做任何事情?" 我們的組件問。不,我們說。停止打擾我們。在整個MuseFind代碼庫中,我們從不使用componentWillUpdate。在功能上,它基本上與componentWillReceiveProps相同,除非你不允許調(diào)用this.setState

如果您正在使用shouldComponentUpdate 并且需要在props更改時執(zhí)行某些操作,那么componentWillUpdate就會很有意義。

最常見的用例: 在一個也有shouldComponentUpdate(但不能訪問以前的props)的組件上使用而不是componentWillReceiveProps

是否可以調(diào)用setState: No

componentDidUpdate

很棒!小組件!

在這里我們可以和componentDidMount做同樣的事情 : 重新設(shè)置我們的 masonry 布局,重繪我們的canvas,等。

等等 - 我們沒有在componentWillReceiveProps中重畫我們的canvas嗎?

是的我們沒有做。原因是:在componentDidUpdate中,你不知道為什么它更新。

因此,如果我們的組件接收到的canvas數(shù)量超過了與我們的canvas相關(guān)的props,我們不希望每次更新時都會浪費時間重繪canvas上面。

這并不意味著componentDidUpdate沒有用。要回到我們的 masonry 布局示例,我們要在DOM自身更新后重新排列網(wǎng)格,所以我們使用componentDidUpdate來完成。

componentDidUpdate() {
  this.createGrid()
}

最常見的用例:更新DOM以響應(yīng)propstate更改。
是否可以調(diào)用setState: Yes

componentWillUnmount

幾乎結(jié)束了~

你的組件將會消失。也許永遠,這很傷心。

在它之前,它詢問你是否有任何最后的請求。

在這里,您可以取消任何傳出的網(wǎng)絡(luò)請求,或刪除與組件關(guān)聯(lián)的所有事件監(jiān)聽器。

基本上,清理任何只涉及到有關(guān)的組件的哦事情,
當(dāng)它走了,它應(yīng)該完全消失。

componentWillUnmount() {
  window.removeEventListen("resize", this,resizeListener)
}

最常見的用例:清理組件中殘留的殘留物。
是否可以調(diào)用setState: No

總結(jié)

在理想的世界中,我們不會使用生命周期方法。我們所有的渲染問題都將通過stateprop進行控制。

但它事實上并不是一個理想的世界,有時您需要更準(zhǔn)確地控制組件更新的方式和時間。

謹(jǐn)慎使用這些方法,并小心使用。我希望這篇文章有助于闡明什么時候和如何使用生命周期方法。

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

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

相關(guān)文章

  • React 組件生命周期

    摘要:此篇文章我們將會繼續(xù)探索組件的特性,特別是生命周期。這些方法叫做組件的生命周期方法且會根據(jù)特定并可預(yù)測的順序被調(diào)用。基本上所有的組件的生命周期方法都可以被分割成四個階段初始化掛載階段更新階段卸載階段。 原文:https://medium.com/react-ecosystem/react-components-lifecycle-ce09239010df#.j7h6w8ccc 譯者序...

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

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

    kbyyd24 評論0 收藏0
  • JS每日一題:react生命周期有哪些?有什么需要注意地方?

    摘要:期的生命周期有哪些有什么需要注意的地方生命周期是什么這里不再累述了,有興趣可以點這里的生命周期這里我們以為準(zhǔn)先上一張圖從圖中我們可以看出來生命周期分為三個部分裝載處理更新處理卸載處理英譯過來叫做裝備,裝配的意思,在這里我們理解為應(yīng)用加載的過 20190304期 react的生命周期有哪些?有什么需要注意的地方? 生命周期是什么這里不再累述了,有興趣可以點這里 react的生命周期 這里...

    seanHai 評論0 收藏0
  • React Mixin 使用

    摘要:可以說,相比繼承而已,更喜歡這種組合的方式。需要指出的是,是可以包含在其他的中的程序會在控制臺打印出。包含多個我們的要包裹在數(shù)組當(dāng)中,提醒了我們可以在組件中包含多個注意事項這里有幾件事需要引起我們的注意,當(dāng)我們使用的時候。 update: Mixin 只適用于 ES5。如果你的項目里面用的是 ES6 ,可以采用高階組件來實現(xiàn) Mixin 的功能。 我使用 React.js 構(gòu)建大型項目...

    張巨偉 評論0 收藏0
  • 】展示型組件和容器型組件(作者:Dan Abramov,Redux開發(fā)者)

    摘要:我的教程可能也會幫你一把其他的二分法展示型組件和容器型組件這種分類并非十分嚴(yán)格,這是按照它們的目的進行分類。在我看來,展示型組件往往是無狀態(tài)的純函數(shù)組件,容器型組件往往是有狀態(tài)的純類組件。不要把展示型組件和容器型組件的劃分當(dāng)成教條。 本文譯自Presentational and Container Components,文章的作者是Dan Abramov,他同時也是Redux和Crea...

    lily_wang 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<