小白隨,歡迎大佬提意見
居然在vue社群寫react的東西,哈哈哈
前言
極客時間的白嫖課,在這裡記錄一下內容和昇華一下知識
程式碼倉庫地址
react程式碼地址
初學前端,有許多不懂的地方,想嘗試寫一些小的demo來學習一下框架底層原理和虛擬Dom
什麼是JSX
將js中的標籤轉化為指定的呼叫方式,統一化的dom管理
return <p>你好</p>
# 翻譯
ToyReact.createElement('p','',[]);
webpack外掛->
babel/plugin-transform-react-jsx
Document.createRange()
‘實’DOM和’虛’DOM
框架中一般虛實並用
- 實dom
- 銷燬並建立新的dom,在少量dom節點情況下幾乎沒有太大的效能消耗
- 在實際中,可能只有傳統開發也不會大量使用,當然在使用v-if的時候會使用
- 虛dom
- 不銷燬dom,通過diff來判斷哪些dom節點是更新後的結果
- 我們這裡採用的diff是重新建立dom,並不是更新dom原有的屬性(更新操作更快還是重新建立更快?二者會產生什麼影響)
diff演算法 -> 虛擬DOM
最後原型
Toy-React
進階
完善和優化程式碼
- 去除標註的佔位
- 新增
由此引出的
前端優化技巧
與常見問題
開始
搭建環境
- npm/yarn
- webpack 配置項
module.exports = { mode: 'development', entry: { main: './index.js', }, module: { rules: [ { test: /\.js$/, use: { loader: 'babel-loader' , options: { presets: ['@babel/preset-env'], plugins: [ [ '@babel/plugin-transform-react-jsx', // 翻譯所用到的函式 {pragma: "ToyReact.createElement"} ] ] }, }, }, ], }, };
- 依賴安裝
"@babel/core": "^7.10.5", "@babel/plugin-transform-react-jsx": "^7.10.4", "@babel/preset-env": "^7.10.4", "babel-loader": "^8.1.0", "webpack": "^4.43.0", "webpack-cli": "^3.3.12"
- 入口檔案 main.js
todo
- 核心類 ToyReact.createElement
todo
總結
現在你已經瞭解了什麼是虛擬Dom,以及為什麼需要虛擬Dom,其核心主要是減少dom節點的刪除和建立,而是用區域性更新進行改變,以此增加效能
推薦閱讀
深入瀏覽器理解CSS animations 和 transitions的效能問題
本作品採用《CC 協議》,轉載必須註明作者和本文連結