Please enable JavaScript.
Coggle requires JavaScript to display documents.
React (React UI (React Suite (为后台产品而生, 支持 Typescript, 支持服务端渲染), React…
React
React UI
React Material-UI
实现了 Google 的 Material Design
52k+ stars(2019.12.6)
React-Bootstrap
具有 Twitter 的 Bootstrap 的观感
16k+ 的 stars(2019.12.6)
React Toolbox
实现了 Google Material Design 规范的 React 组件
提供了一个在线的组件 playground
React Belle
针对移动端和桌面端都有优化的 React 组
样式可以高度定制
React Grommet
Khan Academy
Material Components Web
7k 的 stars
Ant Design React
TypeScript
完整的类型定义
Semantic UI React
5k 的 stars
被 Netflix 和 Amazon 所采用
Onsen UI
5.6k 的 stars
开发移动应用
React Virtualized
8k 的 stars
React Suite
为后台产品而生
支持 Typescript
支持服务端渲染
blueprint
15k+(2019.12.6)
狀態管理
Redux
中央控管資料的store來儲存所有的state
props 和 state
不可更改內容,但可以單向跨組件傳遞的 props
類似 HTML Attribute
可以更改內容,但不能跨組件傳遞的 state
setState 修改狀態
React Context API
每個 context 都有一個 provider 和 consumer
React 16.3+
Provider State (推薦)
結合 Redux 和 Context API
MobX
GraphQL
Hook: useReducer
這是什麼?
狀態機
管理隨時間改變的狀態
關注點
更新DOM
回應事件
VirtualDOM
依據最終狀態渲染DOM
址更新差異部分
減少重覆和非必要的更新
使用單一事件處理
大量事件處理也會導致效能低落
props
核心設計: 狀態一有變動,就用新畫面取代舊畫面
JSX: Javascript XML
What
將標籤和程式碼綑綁再一起
提供語意化更容易理解的標籤
不強制但建議使用
How
屬於語法轉換
每個節點轉換成函數
轉換JS語法
React.createClass
React.createElement
Why
優勢
熟悉性
結構可視化呈現
適合席官標籤語言的開發人員
語意
可視化
樹狀結構
抽象化
語法傳換過程
關注點分離
透過 JSX 等於我們可以直接把 HTML 放到 JavaScript 中去操作
Non DOM屬性
ref
指向子元件的參考
key
可用來判斷重用或銷毀
提高渲染效率
dangerouslySetInnerHTML
語法
{} 安插 javascript expression
( ) 抽離 JSX 片段
事件
依循html的事件處理
html中的class需要更名為className
命名慣例
大寫駝峰
組件名稱
小寫駝峰
其他
只要開頭為 use 的函式,就表示它是個 "Hook"
CSS in JS
WHY
避免clssName衝突
每個組件都是獨立可被重複使用
可以把 JS 中的一些邏輯判斷放到 CSS 使用
What
CSS 寫在 JS
把樣式連同組件寫在一起寫法
How
styled-components
目前使用人數最多
2016年開始
emotion
後勢看漲
2017年開始
套件
emotion/core
emotion/styled
資料傳入子層組件
props
表單元素的處理
受 React 所控制的資料(Controlled)
把表單的資料儲存在該 React 組件內交給他來處理
先透過 useState 來建立保存資料狀態的地方
在表單元素上透過 onChange 事件來取得該表單元素當前的值
更新到 React 組件的資料狀態內
不受 React 所控制的資料(Uncontrolled)
想要很簡單的去取得表單中某個欄位的值
直接操作 DOM
使用 useRef
資料變化不會觸發重新渲染
React 會建議我們使用 Controlled Components
除了上傳檔案用的 <input type="file" /> 例外
因為該元素有安全性的疑慮
JavaScript 只能取值而不能改值
只能透過 Uncontrolled Components 的方式處理
React Hook
內建Hook
useCallback
useEffect的dependencies為函數時用
用來在 dependencies 沒有改變的情況下,把某個 function 保存下來
useState
監控狀態異動
useEffect
渲染後更新數據用
啟動後從遠端抓取資料
數據提取、訂閱、或手工改變來自 React 組件的 DOM。我們稱這些操作為「副作用(side effect)」
useMemo
在 dependencies 沒有改變的情況下,把某個運算的結果保存下來
避免重複運算
不應該產生任何Effect
useRef
current 屬性可以取得預設值或更動後的值
建立並回傳一個帶有 current 屬性的物件
可以幫助開發者,即使在組建重新渲染後,仍可以去取得同一個物件,並取出內部的值來用
可以在 Functional Component 中定義不會導致畫面重新渲染的變數
useReducer
自訂 Hook
把較複雜的程式邏輯抽到 Hook 內執行
可以在多個組件內重複使用
可以打包起來放到開源社群分享給有同樣需求的人使用
都是 JavaScript 的函式
回傳的是一些資料或改變資料的方法
使用 use 開頭來為該函式命名
只能在 React 的 Functional Component 中使用
不能放在迴圈或 if 判斷式內
WHY
優
更容易复用代码
清爽的代码风格
代码量更少
更容易发现无用的状态和函数
更容易拆分组件
缺
状态不同步
副作用代码从主动式变成响应式
WHAT
使用函數定義元件
元件模型
高階元件(HOC:Higher-Order Component)
將類別元件傳入函式,該函式傳回新的類別元件
React.PureComponent
React.Component
函數元件
渲染
ReactDOM
render(): jsx渲染到DOM
Render Props
在類別元件的JSX,定義函式特性(通常命名為render),在類別元件具有可重用的邏輯,並透過props取得該函式,將必要的資料傳入,以取得函式傳回的UI描述
後台渲染
資源
官方文件
路由
react-router
元件生命週期