React原理學習

2021-10-24 20:13:45 字數 2118 閱讀 2054

diff演算法

檢視react編譯結果:babel

編譯後為createelement函式(h函式 ),返回vnode。

// 引數一:標籤名 / 元件變數

// 引數二:attributes

// 引數三及往後:children / text

react.createelement('tagname', null, )

react.createelement('tagname', null, child1, child2, ...)

元件名首字母大寫(react規定),用於區分html tag / 自定義tag

優勢:

同步setstate過程

isbatchingupdates =

true

this

.setstate()

;isbatchingupdates =

false

非同步setstate過程

isbatchingupdates =

true

settimeout((

)=>);

},0)

;isbatchingupdates =

false

總結:

哪些能命中batchupdate機制(react可以管理的入口)

哪些不能batchupdate函式(react管不到的入口)

定義initializeclose鉤子,在自定義函式初始化時包裹。

渲染過程

元件更新過程

更新的兩個階段(patch的拆分)效能問題:

解決方案 fiber:

// 0, 非同步,合併

this

.setstate()

console.

log(

'2',

this

.state.count)

// 0, 非同步,合併

settimeout((

)=>

) console.

log(

'3',

this

.state.count)

// 2,同步})

settimeout((

)=>

) console.

log(

'4',

this

.state.count)

// 3,同步})

}返回乙個新值,沒有***(不會修改其他值)

重點:不可變值

如arr1 = arr1.slice()

diff演算法通過tag和key來判斷是否samenode,減少渲染次數,優化效能

import react from 'react'

import from 'react-router-dom'

const home = react.lazy(() => import('./routes/home'))

)

相同點:

區別:

Traceroute原理學習

traceroute 可以讓我們看到 ip資料報從一台主機傳到另一台主機所經過的路由。曾經介紹過 ip記錄路由的選項 rr,為什麼不使用這個選項而另外開發乙個新的應用程式 traceroute呢?原因有三 其一,並不是所有的路由器都支援記錄路由這個選項 其二,記錄路由一般是單向的選項,傳送端設定了該...

Spring原理學習

簡介 spring 框架是乙個分層架構,由 7 個定義良好的模組組成。spring 模組構建在核心容器之上,核心容器定義了建立 配置和管理 bean 的方式。組成 spring 框架的每個模組 或元件 都可以單獨存在,或者與其他乙個或多個模組聯合實現。每個模組的功能如下 核心容器 核心容器提供 sp...

Mysql 原理學習

7 27 2 併發控制和鎖的概念 併發會 有可能產生 資料髒讀 多個操作修改 同乙個資料時,產生髒資料。解決併發問題的解決方案 鎖的機制 1 共享鎖 2 排它鎖 讀鎖和寫鎖 select 時 加讀鎖,其他的select 操作可以讀取,但是不能修改 update 時 加寫鎖,其他的 操作不了。鎖的粒度...