欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

React嵌套組件的構(gòu)建順序

 更新時間:2021年04月10日 14:56:09   作者:夏花未眠  
這篇文章主要介紹了React嵌套組件的構(gòu)建順序,幫助大家更好的理解和學(xué)習(xí)使用React,感興趣的朋友可以了解下

在React官網(wǎng)中,可以看到對生命周期的描述

這里有一個疑問是,在嵌套組件中,是父組件先構(gòu)建,還是子組件先構(gòu)建?是子組件先更新,還是父組件先更新

解決這個問題,可以從嵌套單個元素入手。下面是一個只有DOM元素的組件 Parent

function Parent(){
  return (
    <div>child</div>
  )
}

對于上面的元素,React會調(diào)用React.createElement創(chuàng)建一個對象,這就是子元素的構(gòu)建階段(這里使用的是babeljs.io/)

React.createElement("div", null, "child")

構(gòu)建之后就是渲染、更新

接著看下嵌套組件

function Child() {
  return <div>child</div>
}
function Parent(){
  return (
   <Child>parent child</Child>
  )
}

React會調(diào)用React.createElement,并傳入以下參數(shù)

function Child() {
  return React.createElement("div", null, "child");
}

function Parent() {
  return React.createElement(Child, null, "parent child");
}

這里我們看出父子組件的構(gòu)建過程,首先對當(dāng)前組件進行構(gòu)建,接著進入到組件中,繼續(xù)構(gòu)建,遵循的原則是從上到下

接著看看傳入多個組件

function Child() {
  return <div>child組件</div>
}
function Parent(){
  return (
    <div>
     <div>div元素</div>
     <Child />
    </div>
  )
}

在React.createElement會傳入以下參數(shù)

React.createElement("div", null, React.createElement("div", null, "div\u5143\u7D20"),React.createElement(Child, null))
React.createElement("div", null, "child\u7EC4\u4EF6")

可以進一步明確,子組件的構(gòu)建和父組件是分離的,并且是在父組件構(gòu)建之后創(chuàng)建的。所以父子組件的構(gòu)建順序是父組件constructor,render子組件constructor,render

當(dāng)子組件render完成后,會調(diào)用componentDidMount

構(gòu)建總結(jié)

在多組件情況下,首先父元素constructor,進行初始化和開始掛載,接著調(diào)用render

對于DOM元素,會立即創(chuàng)建,對于React組件,會在之后進入到組件中,重復(fù)之前的constructor,構(gòu)建,render,直到最后一個子元素

當(dāng)最后一個子組件render完成后,會調(diào)用componentDidMount。也就是元素已經(jīng)掛載完成。之后會層層向上,依次調(diào)用componentDidMount

偏離一點點主題

下面的代碼可以輔助理解上面的內(nèi)容

// RenderChild的作用是,當(dāng)接收到值時,渲染children,沒有值時,渲染其他元素

function RenderChild(props){
  return (
    props.a ? props.children : <div>aaaa</div>
  )
}

寫法一(直接渲染DOM元素):
function Parent(){
  let a = undefined;
  setTimeout(() => {
    a = { b: 1 };
  });
  return (
    <RenderChild val={a}>
      <div>{a.b}</div>
    </RenderChild>
  )
}

寫法二(渲染組件):
function Child(props) {
  return <div>{props.a.b}</div>
}

function Parent(){
  const a = undefined;
  setTimeout(() => {
    a = { b: 1 };
  });
  return (
    <RenderChild val={a}>
      <Child childVal={a} />
    </RenderChild>
  )
}

在上面兩種寫法中,第一種一定會報錯

因為第一種的構(gòu)建參數(shù)是

React.createElement(RenderChild, { val: a },React.createElement("div", null, a.b))
此時a還是undefined

第二種構(gòu)建參數(shù)是

function RenderChild(props) {
  return props.val ? props.children : React.createElement("div", null, "aaaa");
}

function Child(props) {
  return React.createElement("div", null, props.value.b);
}
React.createElement(RenderChild, { val: a }, React.createElement(Child, {
    value: a
 }));

因為Child的構(gòu)建是在RenderChild之后的,所以即使在Child中使用到了不存在的值,也不會報錯

最后總結(jié)

1. React組件的構(gòu)建和開始掛載是從根元素到子元素的,因此數(shù)據(jù)流是從上到下的,掛載完成和狀態(tài)的更新是從子元素到根元素,此時可以將最新狀態(tài)傳給根元素

2. 組件和DOM元素的一個區(qū)別是,DOM元素會在當(dāng)前位置創(chuàng)建,而React組件的構(gòu)建渲染具有層級順序

以上就是React嵌套組件的構(gòu)建順序的詳細內(nèi)容,更多關(guān)于React嵌套組件的構(gòu)建的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • react使用antd表單賦值,用于修改彈框的操作

    react使用antd表單賦值,用于修改彈框的操作

    這篇文章主要介紹了react使用antd表單賦值,用于修改彈框的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • webpack4+react多頁面架構(gòu)的實現(xiàn)

    webpack4+react多頁面架構(gòu)的實現(xiàn)

    webpack在單頁面打包上應(yīng)用廣泛,以create-react-app為首的腳手架眾多。這篇文章主要介紹了webpack4+react多頁面架構(gòu)的實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • 詳解React 代碼共享最佳實踐方式

    詳解React 代碼共享最佳實踐方式

    這篇文章主要介紹了React 代碼共享最佳實踐方式,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05
  • 淺談react路由傳參的幾種方式

    淺談react路由傳參的幾種方式

    這篇文章主要介紹了淺談react路由傳參的幾種方式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Ant Design與Ant Design pro入門使用教程

    Ant Design與Ant Design pro入門使用教程

    Ant Design 是一個服務(wù)于企業(yè)級產(chǎn)品的設(shè)計體系,組件庫是它的 React 實現(xiàn),antd 被發(fā)布為一個 npm 包方便開發(fā)者安裝并使用,這篇文章主要介紹了Ant Design與Ant Design pro入門,需要的朋友可以參考下
    2023-12-12
  • 初識React及React開發(fā)依賴詳解

    初識React及React開發(fā)依賴詳解

    React由Facebook來更新和維護,它是大量優(yōu)秀程序員的思想結(jié)晶,React的流行不僅僅局限于普通開發(fā)工程師對它的認可,大量流行的其他框架借鑒React的思想,接下來通過本文介紹React基礎(chǔ)及React開發(fā)依賴介紹,需要的朋友可以參考下
    2022-10-10
  • React-Native之定時器Timer的實現(xiàn)代碼

    React-Native之定時器Timer的實現(xiàn)代碼

    本篇文章主要介紹了React-Native之定時器Timer的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • 在?React?中如何從狀態(tài)數(shù)組中刪除一個元素

    在?React?中如何從狀態(tài)數(shù)組中刪除一個元素

    這篇文章主要介紹了在?React?中從狀態(tài)數(shù)組中刪除一個元素,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • react國際化react-intl的使用

    react國際化react-intl的使用

    這篇文章主要介紹了react國際化react-intl的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • react 跳轉(zhuǎn)后路由變了頁面沒刷新的解決方案

    react 跳轉(zhuǎn)后路由變了頁面沒刷新的解決方案

    最近在學(xué)習(xí)React的過程中遇到了路由跳轉(zhuǎn)后頁面不刷新的問題,本文就詳細的介紹一下解決方法,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06

最新評論