React
@sawaratsuki1004: Reactを追加しました
https://pbs.twimg.com/media/GNNZGf1bIAAMl7u.png
さわらつき
https://gyazo.com/47ce6e77f039020ee2e76a10c1e988e9
React – The library for web and native user interfaces
JavaScript框架
2023-08-10 React - Speaker Deck
網頁應用歷史
React的特徵
特化於View
React不是MV*框架
因此官方自稱為library
可快速開發,但View層外的設計需由開發者構思
曾嘗試與 MV*框架並用或使用Flux架構
日後認為應用不需要到MV*架構的設計
而是如Router、Data Fetching、狀態管理等等功能
已藉由如Next.js等框架解決一定程度需求
元件導向
React應用由元件組成
不需要Model或Controller
元件包含
負責顯示的邏輯或事件處理器
狀態
內容
元件可以持有子元件
JSX
是種語法擴充,與React互相獨立
不使用JSX亦可使用React,反之亦然
宣告式建構UI
記述what
例如是開或關的「視覺狀態」
UI以單一狀態定義
UI = f(state)
對比:命令式
記述how
例如
jQuery為逐步流程式指定操作
更改是開或關的「變化」
依賴於先前的狀態
會導致模態的發生
模態會引起模態錯誤
例如在「將把手向左轉」的模態內,無法移動已經左轉的把手
每次狀態改變都會重新執行元件、建構DOM
Component = (state) => DOM
類似傳統SSR的樣板
虛擬DOM
實際的DOM處理很慢
React使用JS物件構築虛擬的DOM
Component = (state) => VDOM
更新時會和上次算繪的虛擬DOM做比較
只更新有修改到的部份
並不是「虛擬DOM比較快」,而是「不會變得太慢」
Learn Once, Write Anywhere
2025-02-14 Reactチームが見てる世界、Reactユーザーが見てる世界
Quick Start – React
Tutorial: Tic-Tac-Toe – React
クイックスタート – React
React 教學 Tutorial
安裝React
component(React)
Hooks
React的規則
生命週期
React hooks lifecycle diagram
React.js Examples
pmnd.rs docs
2016-05-09 React を使うとなぜ jQuery が要らなくなるのか
2024-03-17 Reactは悪い意味でも現在のjQueryだし、それを受け止めないと前に進めないということ
2021-03-07 React を深く知るための入り口
How React Works (日本語訳) | How React Works (日本語訳)
use()
2022-10-16 最速攻略! Reactの use RFC
2023-09-25 まず Container より始めよ - Speaker Deck
重新算繪
2022-08-16 Why React Re-Renders • Josh W. Comeau
React只會在狀態改變時才開始重新算繪
而當一個元件重新算繪時,同時也會重新算繪所有後裔
*React只會重新算繪狀態改變的元件和其後裔,而非整個app
每次算繪都是一個快照
React會找出兩個快照之間的變化,因此會更新元件狀態可能影響的後裔
不論後裔元件有無傳入props,只要元件狀態改變時,就會重新算繪所有後裔
因為React難以確認後裔元件是否與改變的狀態有關
現實的React大多不是純粹的
為了確保app狀態與使用者所看到的UI保持一致,React就會進行重新算繪
React.memo()、React.PureComponent
無視必然的重新算繪請求
告訴React「這個元件是純粹的,只需要在props改變時才重新算繪」
「記憶化」
比起計算有多少後裔,檢查哪個props發生改變更加緩慢、昂貴
因此若預設所有元件是記憶化的,反而會更沒效率
但目前也在探索是否有在編譯階段達成自動記憶化的可能性
同樣地,元件中使用useContext()的狀態改變也會重新算繪所有後裔
而在純粹的元件中,context也會像是「隱形的props」或「內在的props」
例如:
code:javascript
const GreetUser = React.memo(() => {
const user = React.useContext(UserContext);
if (!user) {
return "Hi there!";
}
return Hello ${user.name};
});
GreetUser是純粹的,沒有props
但當user改變時,GreetUser也會進行重新算繪
使用devtools找出重新算繪的元件
<C-S-I>>Profiler>齒輪>Record why each component rendered while profiling
1. 錄影
2. 進行操作
3. 停止錄影
4. 觀看快照記錄中的改變
Highlight updates when components render
2023-05-21 Reactを使うならReact Developer Toolsの再レンダリング時ハイライトくらい設定してくれ
更進一步
Understanding useMemo and useCallback • Josh W. Comeau
最佳化
Profiler中的數值不可信,應該使用Performance頁面進行測量
使用低效能的裝置進行測試
Lighthouse分數不是真實使用者體驗的準確反映
不要過度最佳化
over-optimize
2023-08-31 Reactで再レンダリングを抑えるシンプルな方法
co-location
コロケーション
將狀態置於更加相關的地方
composition
組合
【React】Context を使う前に #2 コンポジション (ReactNode 型の Props) を使え #設計 - Qiita
lazy
lazy – React
<Suspense>
<Suspense> – React
React Server Components
2024-04-29 Making Sense of React Server Components
2024-06-26 React Server Componentsを理解したい
bulletproof-react
2021-11-08 Reactベストプラクティスの宝庫!「bulletproof-react」が勉強になりすぎる件
2022-10-10 本気で考えるReactのベストプラクティス!bulletproof-react2022
2023-05-09 React Application Architecture for Production〜これ一冊で全てが網羅〜
diff
MrWangJustToDo/git-diff-view: A Diff View component for React / Vue, just like Github
ericclemmons/click-to-component: Option+Click React components in your browser to instantly open the source in VS Code
GitHub - DavidHDev/react-bits: An open source collection of animated, interactive & fully customizable React components for building stunning, memorable user interfaces.
最佳化
2020-10-13 Reactのパフォーマンスチューニングの歴史をまとめてみた | blog.ojisan.io
2022-10-03 Reactパフォーマンス最適化まとめ #JavaScript - Qiita