DOM和Diff演算法你應該知道的那些事,快收藏!
我們在進行dom操作的時候可能會出現需要更新某一個dom元素,但如果不更新整個元件就無法生效,其實我們使用diff演算法配合虛擬dom即可實現,下面小千就來給大家介紹一下。
虛擬DOM
本質上就是一個JS物件,用來描述你希望在螢幕上看到的內容
Diff演算法
執行過程
初次渲染時,React會根據初始化的state(model),建立一個虛擬DOM物件(樹)
根據虛擬DOM生成真正的DOM,渲染到頁面
當資料變化後(setState()),會重新根據新的資料,建立新的虛擬DOM物件(樹)
與上一次得到的虛擬DOM物件,使用Diff演算法比對(找不同),得到需要更新的內容
最終,React只將變化的內容更新(patch)到DOM中,重新渲染到頁面
程式碼演示
元件render()呼叫後,根據狀態和JSX結構生成虛擬DOM物件(render()方法的呼叫並不意味著瀏覽器進行渲染,render方法呼叫時意味著Diff演算法開始比對了)
示例中,只更新p元素的文字節點內容
初次渲染的DOM物件
資料更新之後的虛擬DOM物件
小結
工作角度:應用第一,原理第二
原理有助於更好的理解React的自身執行機制
setState() 非同步更新資料
父元件更新導致子元件更新,純元件提升效能
思路清晰簡單為前提,虛擬DOM和Diff保效率(渲染變化的元件)
虛擬DOM -> state + JSX
虛擬DOM最大的特點是 脫離了瀏覽器的束縛,也就是意味著只要是能支援js的地方都可以用到react,所以為什麼說react是可以進行跨平臺的開發
以上就是關於dom和diff演算法的介紹了,希望能幫到大家。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31548651/viewspace-2777271/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 用友雲開發者中心,你應該知道的那些事
- 你不知道的那些DOM
- 函式節流你應該知道的那點事,建議收藏!函式
- 你應該知道的前端——快取前端快取
- 你應該知道的Redis事務Redis
- 淺談AsyncLocal,我們應該知道的那些事兒
- DOM的那些事
- 你應該知道的快取進化史快取
- React虛擬dom和diff演算法React演算法
- 你應該知道的關於SEO和Javascript的6個事實JavaScript
- 談談虛擬dom和diff演算法演算法
- SpringApplication你不知道的那些事!SpringAPP
- 虛擬DOM和Diff演算法 - 入門級演算法
- JDBC API的那些事,你真的知道嗎?JDBCAPI
- Flutter 你需要知道的那些事 01Flutter
- 那些前端應該知道的HTTP知識前端HTTP
- 你應該知道的FlutterFlutter
- 你應該知道的RocketMQMQ
- 虛擬DOM與diff演算法演算法
- 你應該知道的JS —— 物件JS物件
- 每個黑帶大師都應該知道的10件事(建議收藏)
- 關於Git小白應該知道的事Git
- [譯] Virtual Dom 和 Diff 演算法在 React 中是如何工作的?演算法React
- 你不知道的軟體測試那些事?
- 你應該知道的程式集版本
- 關於 jwt ,你應該知道的JWT
- 你應該知道的前端--儲存前端
- 你應該知道的前端--渲染原理前端
- 你應該知道的Linux歷史Linux
- 每個綠帶都應該知道的事
- Function和Object 應該知道的FunctionObject
- Vue3 DOM Diff 核心演算法解析Vue演算法
- 詳解虛擬DOM與Diff演算法演算法
- Android技術總監應該乾的那些事Android
- 你應該要知道的JS中的thisJS
- 入門node.js你必須知道的那些事Node.js
- 你所不知道的阿里開源那些事兒阿里
- 你一定要知道imToken錢包的那些事