學習資源
Redux 文件旨在教授 Redux 的基本概念,並說明在實際應用中使用關鍵概念。但是,文件無法涵蓋所有內容。很幸運地,還有許多其他很棒的資源可供學習 Redux。我們鼓勵您查看它們。其中許多涵蓋文件範圍以外的主題,或以其他更適合您學習風格的方式描述相同的主題。
此頁面包含我們推薦的一些最佳外部資源,可供學習 Redux。如需 React、Redux、Javascript 和相關主題的更多教學、文章和其他資源清單,請參閱React/Redux 連結清單。
基本簡介
教學 Redux 基本概念和如何使用它的教學
React、Redux 和 TypeScript 簡介
https://blog.isquaredsoftware.com/2020/12/presentations-react-redux-ts-intro/
Redux 維護者 Mark Erikson 的投影片集,涵蓋 React、Redux 和 TypeScript 的基礎知識。Redux 主題包括儲存、簡化器、中間件、React-Redux 和 Redux Toolkit。學習現代 Redux - Redux Toolkit、React-Redux Hooks 和 RTK Query
https://www.learnwithjason.dev/let-s-learn-modern-redux
「與 Jason 學習」節目的一集,Redux 維護者 Mark Erikson 擔任嘉賓。這集節目展示了一個現場編碼應用程式,並說明如何建立一個新的 React+TS 專案、新增 Redux 套件,以及從頭開始設定 Redux Toolkit 和 React-Redux(包括我們建議的 TS hooks 組態)。它也說明如何使用即將推出的 RTK Query 資料擷取 API,並在 UI 中顯示該資料。Redux 教學:概觀和演練
https://www.taniarascia.com/redux-react-guide/
Tania Rascia 撰寫的一份寫得很好的教學,快速說明 Redux 的主要概念,並說明如何使用原生的 Redux 和 Redux Toolkit 組合一個基本的 Redux + React 應用程式。初學者專用 Redux - 學習 Redux 的腦力激盪指南
https://www.freecodecamp.org/news/redux-for-beginners-the-brain-friendly-guide-to-redux/
一個易於遵循的教學,使用 Redux Toolkit 和 React-Redux 建立一個小型待辦事項應用程式,包括資料擷取。使用 Redux Toolkit 和 TypeScript 讓 Redux 變簡單
https://www.mattbutton.com/redux-made-easy-with-redux-toolkit-and-typescript/
一個有用的教學,說明如何將 Redux Toolkit 和 TypeScript 結合使用來撰寫 Redux 應用程式,以及 RTK 如何簡化典型的 Redux 使用方式。Redux:從 Twitter 炒作到實際應用
https://slides.com/jenyaterpil/redux-from-twitter-hype-to-production#/
一個製作精良的投影片,以視覺方式逐步說明 Redux 的核心概念、與 React 的使用方式、專案組織,以及使用 thunk 和 saga 的副作用。有一些很好的動畫圖表,說明資料如何透過 React+Redux 架構流動。
使用 Redux 搭配 React
React-Redux 繫結函式庫的說明
使用 React-Redux Hooks 現代化傳統 Redux 應用程式
https://app.egghead.io/playlists/modernizing-a-legacy-redux-application-with-react-hooks-c528
一個影片系列,說明較早的connect
API 和較新的 React-Redux hooks API 之間的差異,以及如何在元件中使用這些 hooks。為什麼 Redux 在 React 應用程式中很有用
https://www.fullstackreact.com/articles/redux-with-mark-erikson/
說明使用 Redux 搭配 React 的一些好處,包括在元件之間共用資料和熱模組重新載入。
專案式教學
透過建置專案來教授 Redux 概念的教學,包括較大型的「真實世界」類型應用程式
- Redux 實務
https://blog.isquaredsoftware.com/2016/10/practical-redux-part-0-introduction/
https://blog.isquaredsoftware.com/series/practical-redux/
一系列持續發表的文章,旨在透過建置範例應用程式來示範多項特定的 Redux 技術,此範例應用程式是基於 MekHQ 應用程式,用於管理 Battletech 活動。由 Redux 共同維護者 Mark Erikson 所撰寫。涵蓋的主題包括管理關聯資料、連接多個元件和清單、複雜的特色縮減器邏輯、處理表單、顯示模式對話方塊等等。(注意:這是一個較舊的系列文章,我們現在建議使用較新的 Redux 程式碼撰寫模式。不過,本系列文章中的許多原則仍然很有價值。)
Redux 實作
透過撰寫微型重新實作來說明 Redux 在內部如何運作
開始使用 Redux - 影片系列
https://egghead.io/courses/fundamentals-of-redux-course-from-dan-abramov-bd5cc867
https://github.com/tayiorbeii/egghead.io_redux_course_notes
Redux 的建立者 Dan Abramov 在 30 部簡短(2-5 分鐘)的影片中示範了各種概念。連結的 Github 儲存庫包含影片的筆記和逐字稿。使用慣用語法 Redux 建置 React 應用程式 - 影片系列
https://egghead.io/courses/building-react-applications-with-idiomatic-redux
https://github.com/tayiorbeii/egghead.io_idiomatic_redux_course_notes
Dan Abramov 的第二個影片教學系列,直接延續第一個系列。包含有關儲存初始狀態、將 Redux 與 React Router 搭配使用、使用「選擇器」函式、正規化狀態、使用 Redux 中介軟體、非同步動作建立器等等的課程。連結的 Github 儲存庫包含影片的筆記和逐字稿。Live React:熱重載和時光旅行
https://youtube.com/watch?v=xsSnOQynTHs
Dan Abramov 最初在會議上發表的演講,介紹了 Redux。看看 Redux 強制的限制如何讓熱重載和時光旅行變得容易自己建構一個 Redux
https://zapier.com/engineering/how-to-build-redux/
一篇深入探討的「建構一個迷你 Redux」的優秀文章,不僅涵蓋 Redux 的核心,還涵蓋connect
和中介軟體。Connect.js 說明
https://gist.github.com/gaearon/1d19088790e70ac32ea636c025ba424e
React Redux 的connect()
函式的極簡化版本,用於說明基本實作讓我們撰寫 Redux!
https://www.jamasoftware.com/blog/lets-write-redux/
逐步說明撰寫 Redux 微型版本的過程,以協助說明概念和實作。
縮減器
討論撰寫縮減器函式的文章
善用
combineReducers
https://randycoulman.com/blog/2016/11/22/taking-advantage-of-combinereducers/
使用combineReducers
多次以產生狀態樹的範例,以及對各種簡化器邏輯方法的權衡考量。高階簡化器的威力
https://slides.com/omnidan/hor#/
redux-undo 等函式庫的作者所製作的投影片,說明高階簡化器的概念以及如何使用它們。使用高階簡化器進行簡化器組合
https://medium.com/@mange_vibration/reducer-composition-with-higher-order-reducers-35c3977ed08f
撰寫小型函式的一些絕佳範例,這些函式可以組合在一起以執行較大的特定簡化器任務,例如提供初始狀態、篩選、更新特定金鑰等。高階簡化器 - 聽起來很可怕
https://medium.com/@danielkagan/high-order-reducers-it-just-sounds-scary-2b9e5dbfc705
說明如何將簡化器組合成樂高積木,以建立可重複使用且可測試的簡化器邏輯。
選擇器
說明如何以及為何使用選擇器函式從狀態中讀取值
慣用的 Redux:使用 Reselect 選擇器進行封裝和效能最佳化
https://blog.isquaredsoftware.com/2017/12/idiomatic-redux-using-reselect-selectors/
為何應與 Redux 搭配使用選擇器函式的完整指南,以及如何使用 Reselect 函式庫撰寫最佳化的選擇器,以及改善效能的進階秘訣。ReactCasts #8:Redux 中的選擇器
https://www.youtube.com/watch?v=frT3to2ACCw
為何以及如何使用選擇器函式從儲存體中擷取資料,以及從儲存體值中衍生其他資料的絕佳概觀。使用 Reselect 最佳化 React Redux 應用程式開發
https://codebrahma.com/reselect-tutorial-optimizing-react-redux-application-development-with-reselect/
有關 Reselect 的良好教學課程。涵蓋「選擇器函式」的概念、如何使用 Reselect 的 API,以及如何使用記憶化選擇器來改善效能。在 React-Redux 應用程式中使用 Reselect
https://dashbouquet.com/blog/frontend-development/usage-of-reselect-in-a-react-redux-application
討論記憶化選擇器對效能的重要性,以及使用 Reselect 的良好做法。React、Reselect 和 Redux
https://medium.com/@parkerdan/react-reselect-and-redux-b34017f8194c
說明 Reselect 的記憶化選擇器函式在 Redux 應用程式中如何有用,以及如何為每個元件實例建立唯一的選擇器實例。
正規化
如何將 Redux 儲存結構化為資料庫以獲得最佳效能
查詢 Redux 儲存
https://medium.com/@adamrackis/querying-a-redux-store-37db8c7f3b0f
了解在 Redux 中組織和儲存資料的最佳實務,包括正規化資料和使用選擇器函數。正規化 Redux 儲存以最大化程式碼重複使用
https://medium.com/@adamrackis/normalizing-redux-stores-for-maximum-code-reuse-ae6e3844ae95
探討正規化 Redux 儲存如何啟用一些有用的資料處理方法,並舉例說明使用選擇器函數來反正規化階層資料。進階 Redux 實體正規化
https://medium.com/@dcousineau/advanced-redux-entity-normalization-f5f1fe2aefc5
描述「keyWindow」概念,用於追蹤狀態中實體的子集,類似於 SQL「檢視」。這是正規化資料概念的有用延伸。
中間件
說明和範例,說明中間件如何運作以及如何撰寫中間件
探索 Redux 中間件
https://blog.krawaller.se/posts/exploring-redux-middleware/
透過一系列的小實驗了解中間件Redux 中間件教學
https://github.com/pshrmn/notes/blob/master/redux/redux-middleware.md
概述中間件是什麼、applyMiddleware
如何運作,以及如何撰寫中間件。ReactCasts #6:Redux 中間件
https://www.youtube.com/watch?v=T-qtHI1qHIg
螢幕錄影說明中間件如何融入 Redux、它們的用途,以及如何實作自訂中間件Redux 中間件初學者指南
https://www.codementor.io/reactjs/tutorial/beginner-s-guide-to-redux-middleware
有用的中間件用例說明,並附有許多範例JavaScript 中的函數組合
https://joecortopassi.com/articles/functional-composition-in-javascript/
分解compose
函數如何運作
副作用 - 基礎
Redux 中處理非同步行為的簡介
Stack Overflow:使用逾時調用 Redux 動作
https://stackoverflow.com/questions/35411423/how-to-dispatch-a-redux-action-with-a-timeout/35415559#35415559
Dan Abramov 說明 Redux 中管理非同步行為的基礎知識,逐步介紹一系列方法(內嵌非同步呼叫、非同步動作建立器、thunk 中間件)。Stack Overflow:為什麼 Redux 中的非同步流程需要中間件?
https://stackoverflow.com/questions/34570758/why-do-we-need-middleware-for-async-flow-in-redux/34599594#34599594
Dan Abramov 說明使用 thunk 和非同步中間件的原因,以及一些使用 thunk 的有用模式。「thunk」到底是什麼?
https://daveceddia.com/what-is-a-thunk/
簡短說明「thunk」這個詞在一般情況下的意思,以及在 Redux 中的特定意思。Redux 中的 thunk:基礎
https://medium.com/fullstack-academy/thunks-in-redux-the-basics-85e538a3fe60
深入了解 thunk 是什麼、它們解決了什麼問題以及如何使用它們。
副作用 - 進階
管理非同步行為的進階工具和技術
在 Redux 中執行非同步操作的正確方法是什麼?
https://decembersoft.com/posts/what-is-the-right-way-to-do-asynchronous-operations-in-redux/
深入探討 Redux 副作用最受歡迎的程式庫,並比較每個程式庫的運作方式。Redux 4 種方法
https://medium.com/react-native-training/redux-4-ways-95a130da0cdc
並排比較使用 thunk、sagas、可觀察物件和承諾中介軟體實作一些基本資料擷取。慣用的 Redux:關於 thunk、sagas、抽象和可重複使用的想法
https://blog.isquaredsoftware.com/2017/01/idiomatic-redux-thoughts-on-thunks-sagas-abstraction-and-reusability/
回應幾個「thunk 很糟糕」的疑慮,主張 thunk(和 sagas)仍然是管理複雜同步邏輯和非同步副作用的有效方法。JavaScript 強力工具:Redux-Saga
https://formidable.com/blog/2017/javascript-power-tools-redux-saga/
https://formidable.com/blog/2017/composition-patterns-in-redux-saga/
https://formidable.com/blog/2017/real-world-redux-saga-patterns/
一系列絕佳的文章,教授 Redux-Saga 背後的概念、實作和好處,包括如何使用 ES6 產生器控制函式流程、如何將 sagas 組合在一起以達成並行,以及 sagas 的實際使用案例。探索 Redux Sagas
https://medium.com/onfido-tech/exploring-redux-sagas-cc1fca2015ee
一篇出色的文章,探討如何使用 sagas 提供一個膠水層,在 Redux 應用程式中實作解耦的商業邏輯。使用 Sagas 馴服 Redux
https://objectpartners.com/2017/11/20/taming-redux-with-sagas/
Redux-Saga 的良好概觀,包括產生器函式的資訊、sagas 的使用案例、使用 sagas 處理承諾和測試 sagas。使用 RxJS 的反應式 Redux 狀態
https://ivanjov.com/reactive-redux-state-with-rxjs/
描述「反應式程式設計」的概念和 RxJS 程式庫,並展示如何使用 redux-observable 擷取資料,以及測試範例。使用 redux-observable 處理 Redux 中的非同步邏輯
https://medium.com/dailyjs/using-redux-observable-to-handle-asynchronous-logic-in-redux-d49194742522
一篇延伸文章,比較基於 thunk 的實作處理線條繪製範例與基於可觀察物件的實作。
在 Redux 中思考
深入探討 Redux 的使用方式,以及它為何能如此運作
- 何時(以及何時不)使用 Redux
https://changelog.com/posts/when-and-when-not-to-reach-for-redux
Redux 維護者 Mark Erikson 描述了 Redux 解決的問題,以及它與其他常用工具的比較。
你可能不需要 Redux
https://medium.com/@dan_abramov/you-might-not-need-redux-be46360cf367
Dan Abramov 討論了使用 Redux 所涉及的權衡。慣用的 Redux:Redux 的道,第 1 部分 - 實作和意圖
https://blog.isquaredsoftware.com/2017/05/idiomatic-redux-tao-of-redux-part-1/
深入探討 Redux 的實際運作方式、它要求你遵循的限制,以及其設計和使用背後的意圖。慣用的 Redux:Redux 的道,第 2 部分 - 實務和哲學
https://blog.isquaredsoftware.com/2017/05/idiomatic-redux-tao-of-redux-part-2/
後續探討為何存在常見的 Redux 使用模式、Redux 的其他使用方式,以及對這些不同模式和方法的優缺點的看法。Redux 有什麼好處?
https://medium.freecodecamp.org/whats-so-great-about-redux-ac16f1cc0f8b
深入且引人入勝的分析,探討 Redux 與 OOP 和訊息傳遞的比較、典型的 Redux 使用如何演變成具有更多樣板的類似 Java 的「設定器」函數,以及呼籲在 Redux 之上建立更高級別的「受祝福」抽象,以簡化新手的工作和學習。非常值得一讀。
Redux 架構
架構大型 Redux 應用程式的模式和實務
在架構應用程式狀態時避免意外的複雜性
https://hackernoon.com/avoiding-accidental-complexity-when-structuring-your-app-state-6e6d22ad5e2a
組織 Redux 儲存結構的絕佳準則。Redux 步驟:一個簡單且強大的工作流程,適用於實際應用程式
https://hackernoon.com/redux-step-by-step-a-simple-and-robust-workflow-for-real-life-apps-1fdf7df46092
「意外的複雜性」文章的後續文章,討論原則我希望我知道關於 Redux 的事
https://medium.com/horrible-hacks/things-i-wish-i-knew-about-redux-9924abf2f9e0
https://www.reddit.com/r/javascript/comments/4taau2/things_i_wish_i_knew_about_redux/
使用 Redux 建立應用程式後獲得的許多絕佳提示和教訓。包括關於連接組件、選擇資料和應用程式/專案結構的資訊。在 Reddit 上有額外的討論。React+Redux:乾淨、可靠和可維護程式碼的提示和最佳實務
https://speakerdeck.com/goopscoop/react-plus-redux-tips-and-best-practices-for-clean-reliable-and-scalable-code
一份出色的幻燈片,包含各種提示和建議,包括保持動作建立器簡潔,在還原器中進行資料處理,抽象化 API 呼叫,避免傳播道具等。Redux,用於大型網路應用程式的狀態管理
https://blog.mapbox.com/redux-for-state-management-in-large-web-apps-c7f3fab3ce9b
關於慣用 Redux 架構的出色討論和範例,以及 Mapbox 如何將這些方法套用於其 Mapbox Studio 應用程式。
應用程式和範例
React-Redux RealWorld 範例:適用於真實世界的 TodoMVC
https://github.com/GoThinkster/redux-review
一個使用 Redux 建置的範例全堆疊「真實世界」應用程式。展示一個類似 Medium 的社群部落格網站,其中包含 JWT 驗證、CRUD、收藏文章、追蹤使用者、路由等。RealWorld 專案還包含網站前端和後端的許多其他實作,特別用於展示同一專案和 API 規格的不同伺服器和用戶端實作之間的比較。Mini-Mek 專案
https://github.com/markerikson/project-minimek
一個範例應用程式,用於展示各種有用的 Redux 技術,搭配 https://blog.isquaredsoftware.com/series/practical-redux 上的「實用 Redux」部落格系列react-redux-yelp-clone
https://github.com/mohamed-ismat/react-redux-yelp-clone
FullStackReact 的「Yelp Clone」應用程式的改編版本。它透過使用 Redux 和 Redux Saga(而非區域狀態),以及 React Router v4、styled-components 和其他現代標準,來擴充原始版本。基於 React-Boilerplate 初學者套件。WordPress-Calypso
https://github.com/Automattic/wp-calypso
新的 JavaScript 和 API 驅動的 WordPress.comSound-Redux
https://github.com/andrewngu/sound-redux
一個使用 React/Redux 建置的 Soundcloud 用戶端Webamp
https://webamp.org
https://github.com/captbaritone/webamp
一個使用 React 和 Redux 建置的 Winamp2 網頁瀏覽器重建版本。實際上可以播放 MP3,並允許您載入本機 MP3 檔案。Tello
https://github.com/joshwcomeau/Tello
一個簡單且令人愉悅的方式,用於追蹤和管理電視節目io-808
https://github.com/vincentriemer/io-808
嘗試完全重建一個網頁版的 TR-808 鼓機
Redux 文件翻譯
- 中文文件 — 簡體中文
- 繁體中文文件 — 繁體中文
- Redux in Russian — 俄文
- Redux en Español - 西班牙文
- Redux in Korean - 韓文
書籍
Redux in Action
https://www.manning.com/books/redux-in-action
一本涵蓋 Redux 使用許多關鍵面向的全面書籍,包括 reducer 和 action 的基礎知識、與 React 搭配使用、複雜的 middleware 和副作用、應用程式結構、效能、測試,以及更多內容。對於使用 Redux 的許多方法的優缺點和權衡取捨,都有很好的說明。Redux 共同維護者 Mark Erikson 個人推薦。The Complete Redux Book
https://leanpub.com/redux-book
如何在實際環境中管理龐大的狀態?為什麼我需要 store enhancer?處理表單驗證的最佳方式是什麼?使用簡單的術語和範例程式碼,就能獲得所有這些問題以及更多問題的解答。學習使用 Redux 建置複雜且可實際運作的 Web 應用程式所需的一切知識。(注意:現在永久免費!)Taming the State in React
https://www.robinwieruch.de/learn-react-redux-mobx-state-management/
如果你已經使用作者的上一本書 The Road to learn React 學習 React,那麼 Taming the State in React 將會是學習 React 中基本和進階狀態管理的完美組合。你將從不使用 React 的情況下開始學習 Redux。之後,本書將向你展示如何將 Redux 連接到你的 React 應用程式。進階章節將教你正規化、命名、選擇器和非同步動作。最後,你將使用 React 和 Redux 設定並建置一個真實世界的應用程式。
課程
Modern React with Redux,作者 Stephen Grider(付費)
https://www.udemy.com/react-redux/
使用本教學課程,在開發具有 React Router、Webpack 和 ES2015 的應用程式時,掌握 React 和 Redux 的基礎知識。本課程將讓你快速上手,並教授你深入了解和建置 React 元件以及使用 Redux 建構應用程式結構的核心知識。Redux,作者 Tyler McGinnis(付費)
https://tylermcginnis.com/courses/redux/
在學習 Redux 時,你需要在夠大的應用程式中學習它,才能看出它的好處。這就是為什麼本課程如此龐大的原因。一個更好的名稱可能是「真實世界的 Redux」。如果你受夠了「待辦事項清單」Redux 教學課程,那麼你來對地方了。在本課程中,我們將討論 Redux 在管理應用程式狀態方面有什麼特別之處。我們將建置一個實際的「真實世界」應用程式,以便你了解 Redux 如何處理樂觀更新和錯誤處理等邊界情況。我們還將涵蓋許多與 Redux 搭配良好的其他技術,例如 Firebase 和 CSS 模組。Learn Redux,作者 Wes Bos(免費)
https://learnredux.com/
一個影片課程,逐步建置「Reduxstagram」— 一個簡單的照片應用程式,它將簡化 Redux、React Router 和 React.js 背後的核心概念
更多資源
- React-Redux Links 是 React、Redux、ES2015 等的精選文章、教學課程和相關內容清單。
- Redux Ecosystem Links 是 Redux 相關函式庫、外掛程式和公用程式分類彙整。
- Awesome Redux 是 Redux 相關儲存庫的詳盡清單。
- DEV Community 是分享 Redux 專案、文章和教學課程的地方,也可以開始討論並徵求 Redux 相關主題的回饋。歡迎各個技術層級的開發人員參與。