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管不到的入口)
定義initialize
和close
鉤子,在自定義函式初始化時包裹。
渲染過程
元件更新過程
更新的兩個階段(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 時 加寫鎖,其他的 操作不了。鎖的粒度...