国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - React - React嵌套組件的構建順序

React嵌套組件的構建順序

2022-02-27 17:16夏花未眠 React

這篇文章主要介紹了React嵌套組件的構建順序,幫助大家更好的理解和學習使用React,感興趣的朋友可以了解下

在React官網中,可以看到對生命周期的描述

React嵌套組件的構建順序

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

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

?
1
2
3
4
5
function Parent(){
  return (
    <div>child</div>
  )
}

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

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

構建之后就是渲染、更新

接著看下嵌套組件

?
1
2
3
4
5
6
7
8
function Child() {
  return <div>child</div>
}
function Parent(){
  return (
   <Child>parent child</Child>
  )
}

React會調用React.createElement,并傳入以下參數

?
1
2
3
4
5
6
7
function Child() {
  return React.createElement("div", null, "child");
}
 
function Parent() {
  return React.createElement(Child, null, "parent child");
}

這里我們看出父子組件的構建過程,首先對當前組件進行構建,接著進入到組件中,繼續構建,遵循的原則是從上到下

接著看看傳入多個組件

?
1
2
3
4
5
6
7
8
9
10
11
function Child() {
  return <div>child組件</div>
}
function Parent(){
  return (
    <div>
     <div>div元素</div>
     <Child />
    </div>
  )
}

在React.createElement會傳入以下參數

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

可以進一步明確,子組件的構建和父組件是分離的,并且是在父組件構建之后創建的。所以父子組件的構建順序是父組件constructor,render子組件constructor,render

當子組件render完成后,會調用componentDidMount

構建總結

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

對于DOM元素,會立即創建,對于React組件,會在之后進入到組件中,重復之前的constructor,構建,render,直到最后一個子元素

當最后一個子組件render完成后,會調用componentDidMount。也就是元素已經掛載完成。之后會層層向上,依次調用componentDidMount

偏離一點點主題

下面的代碼可以輔助理解上面的內容

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// RenderChild的作用是,當接收到值時,渲染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>
  )
}

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

React嵌套組件的構建順序

因為第一種的構建參數是

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

第二種構建參數是

?
1
2
3
4
5
6
7
8
9
10
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的構建是在RenderChild之后的,所以即使在Child中使用到了不存在的值,也不會報錯

最后總結

1. React組件的構建和開始掛載是從根元素到子元素的,因此數據流是從上到下的,掛載完成和狀態的更新是從子元素到根元素,此時可以將最新狀態傳給根元素

2. 組件和DOM元素的一個區別是,DOM元素會在當前位置創建,而React組件的構建渲染具有層級順序

以上就是React嵌套組件的構建順序的詳細內容,更多關于React嵌套組件的構建的資料請關注服務器之家其它相關文章!

原文鏈接:https://juejin.cn/post/6949372925732454437

延伸 · 閱讀

精彩推薦
  • ReactVite搭建React項目的方法步驟

    Vite搭建React項目的方法步驟

    這篇文章主要介紹了Vite搭建React項目的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面...

    Cookieboty5172022-02-24
  • ReactReact使用emotion寫css代碼

    React使用emotion寫css代碼

    這篇文章主要介紹了React如何使用emotion寫css代碼,幫助大家更好的理解和學習使用React,感興趣的朋友可以了解下...

    joychenke8192022-02-25
  • React編寫簡潔React組件的小技巧

    編寫簡潔React組件的小技巧

    這篇文章主要介紹了編寫簡潔React組件的小技巧,幫助大家更好的理解和學習使用React,感興趣的朋友可以了解下...

    KooFE前端團隊7572022-02-25
  • React不用一行代碼,搞懂React調度器原理

    不用一行代碼,搞懂React調度器原理

    本文會講解React調度器Scheduler的實現原理。知道你不喜歡看大段的代碼,所以本文沒有一行代碼。文末有Scheduler的源碼地址,感興趣的話可以去看看。...

    魔術師卡頌10562021-12-26
  • React詳解react setState

    詳解react setState

    這篇文章主要介紹了react setState的相關資料,幫助大家更好的理解和學習使用react,感興趣的朋友可以了解下...

    一個前端王4942022-02-27
  • ReactReactRouter的實現方法

    ReactRouter的實現方法

    這篇文章主要介紹了ReactRouter的實現,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下...

    WindrunnerMax6202022-01-06
  • Reactreact hooks入門詳細教程

    react hooks入門詳細教程

    這篇文章主要介紹了react hooks入門詳細教程,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考...

    抱素_6832022-02-23
  • React使用hooks寫React組件需要注意的5個地方

    使用hooks寫React組件需要注意的5個地方

    這篇文章主要介紹了使用hooks寫React組件需要注意的5個地方,幫助大家更好的理解和學習使用React組件,感興趣的朋友可以了解下...

    forrest醬8702022-02-24
主站蜘蛛池模板: 国产精品美女久久久久久久久久久 | 激情综合色综合久久综合 | 97视频久久久 | 亚洲一区二区在线 | 色天堂影院 | 超碰在线99 | 国产精品三级视频 | 激情久久婷婷 | 一区二区三区免费观看 | 一级电影免费在线观看 | 国产中文久久 | 91精选视频在线观看 | 日韩理论在线 | 精品国产三级 | 成人区精品一区二区毛片不卡 | 亚洲国产一区二区在线观看 | 国产99久久久精品视频 | 免费嗨片网 | 免费精品人在线二线三线区别 | 超碰一区 | 黄色在线免费 | 紧缚调教一区二区三区视频 | 中文字幕在线观看一区二区 | www.色.com | 日韩视频在线一区二区 | 日韩一区二区三区在线观看 | 视频一区中文字幕 | 一级国产 | 日韩素人一区二区三区 | 日韩一二三区 | 亚洲精品在线免费看 | 国产精品毛片在线 | jvid精品资源在线观看 | 日韩一区二区免费电影 | 亚洲免费视频网 | 青草青草久热精品视频在线观看 | 亚洲精品无码专区在线播放 | 毛片首页 | 日韩码有限公司在线观看 | 成人黄页在线观看 | 色站综合 |