激情久久久_欧美视频区_成人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
主站蜘蛛池模板: 亚洲成人第一页 | 国产精品成年片在线观看, 日韩毛片网 | 全免费午夜一级毛片真人 | 亚洲男人一区 | 巨乳激情 | 哪里可以看免费的av | 欧美一级成人一区二区三区 | 一级黄色毛片免费 | 美女久久 | 竹内纱里奈55在线观看 | 久久久久久中文字幕 | 国产精品性夜天天视频 | 激情视频免费看 | 久久久入口 | 一级黄色毛片免费 | 日韩视频在线观看免费视频 | 万圣街在线观看免费完整版 | 亚洲婷婷日日综合婷婷噜噜噜 | 日韩视频―中文字幕 | 日韩毛片网| 激情在线视频 | 久久国产在线观看 | 羞羞视频免费入口网站 | 日韩精品中文字幕在线观看 | 久久色伦理资源站 | 日韩视频精品一区 | 少妇一级淫片免费看 | 成人免费一区 | 成人毛片在线 | 精品一区二区久久久久久按摩 | 黄色va视频 | 亚洲影视在线观看 | 亚洲电影在线观看高清免费 | 国色天香综合网 | 久久亚洲精品久久国产一区二区 | 中文字幕在线播放第一页 | 黄色小视频免费在线观看 | 99在线精品视频免费观看20 | 99精品视频99 | 国产一及毛片 | 91久久久久久久一区二区 |