完整的 Redux 工具包 - 非同步邏輯(第 -2 部分)
1。 Redux Toolkit 中的非同步邏輯簡介
在 Redux 中處理非同步邏輯通常涉及大量樣板程式碼,例如建立操作類型、操作建立者和減速器來處理不同的狀態(載入、成功、錯誤)。 Redux Toolkit 使用 createAsyncThunk 簡化了這個過程,它允許您以最少的設定為非同步操作定義「thunk」。
createAsyncThunk:
- 自動產生待處理、完成和拒絕的操作類型。
- 更容易處理 API 請求等副作用。
- 與使用 createSlice 建立的切片無縫整合。
2。使用 createAsyncThunk 進行 API 呼叫
讓我們逐步建立一個非同步 thunk 以從公用 API 取得資料並管理不同的載入狀態。
第 1 步:設定簡單的 API 服務
我們將使用免費的公共 API 來示範此範例。假設我們有一個傳回帖子列表的 API 端點。
第 2 步:建立非同步 Thunk
首先,在 features/posts 目錄中建立一個名為 postsSlice.js 的新切片檔案。我們將使用 createAsyncThunk 非同步獲取帖子。
// src/features/posts/postsSlice.js import { createSlice, createAsyncThunk } from '@reduxjs/toolkit'; // Async thunk to fetch posts from an API export const fetchPosts = createAsyncThunk('posts/fetchPosts', async () => { const response = await fetch('https://jsonplaceholder.typicode.com/posts'); const data = await response.json(); return data; // This will be the 'fulfilled' action payload }); const postsSlice = createSlice({ name: 'posts', initialState: { posts: [], status: 'idle', // idle | loading | succeeded | failed error: null, }, reducers: { // Optional: add reducers for synchronous actions }, extraReducers: (builder) => { builder .addCase(fetchPosts.pending, (state) => { state.status = 'loading'; }) .addCase(fetchPosts.fulfilled, (state, action) => { state.status = 'succeeded'; state.posts = action.payload; }) .addCase(fetchPosts.rejected, (state, action) => { state.status = 'failed'; state.error = action.error.message; }); }, }); export default postsSlice.reducer;
說明:
createAsyncThunk:此函數有兩個參數:字串運算型別和非同步函數。非同步函數是 API 呼叫發生的地方。當承諾解決時,資料將被傳回並自動分派為已完成的操作負載。
extraReducers:用於處理 createAsyncThunk 產生的運算。我們管理三種狀態:待處理、完成和拒絕。
3。將 thunk 整合到組件中
現在,讓我們在 React 元件中使用 fetchPosts thunk 並顯示資料。
第 1 步:建立 PostsList 元件
在 features/posts 目錄下建立 PostsList.js 元件:
// src/features/posts/PostsList.js import React, { useEffect } from 'react'; import { useSelector, useDispatch } from 'react-redux'; import { fetchPosts } from './postsSlice'; const PostsList = () => { const dispatch = useDispatch(); const posts = useSelector((state) => state.posts.posts); const status = useSelector((state) => state.posts.status); const error = useSelector((state) => state.posts.error); useEffect(() => { if (status === 'idle') { dispatch(fetchPosts()); } }, [status, dispatch]); let content; if (status === 'loading') { content = <p>Loading...</p>; } else if (status === 'succeeded') { content = ( <ul> {posts.map((post) => ( <li key={post.id}>{post.title}</li> ))} </ul> ); } else if (status === 'failed') { content = <p>{error}</p>; } return ( <section> <h2>Posts</h2> {content} </section> ); }; export default PostsList;
說明:
useEffect 鉤子在元件安裝時調度 fetchPosts,但前提是目前狀態為「空閒」。
檢查狀態以確定要呈現的內容(載入微調器、貼文清單或錯誤訊息)。
第 2 步:將貼文清單新增至應用程式
更新主 App.js 檔案以包含 PostsList 元件:
// src/App.js import React from 'react'; import PostsList from './features/posts/PostsList'; function App() { return ( <div className="App"> <PostsList /> </div> ); } export default App;
4。非同步 Thunk 的最佳實踐
避免組件中的繁重邏輯:透過分派 thunk 來處理非同步邏輯,保持元件乾淨。
集中錯誤處理:處理切片中的錯誤,而不是在每個元件中重複邏輯。
標準化資料:考慮使用 Normalizr 等函式庫標準化狀態形狀,以有效管理複雜的資料結構。
記憶選擇器:使用重新選擇中的 createSelector 來記憶選擇器以獲得更好的性能。
5。結論與後續步驟
在這一部分中,我們探討如何使用 createAsyncThunk 處理 Redux Toolkit 中的非同步邏輯。我們學習如何建立非同步 thunk、處理不同的狀態以及在元件中使用它。在下一部分中,我們將深入研究 RTK Query——一個強大的資料擷取和快取工具,可進一步簡化 Redux 開發。
_
敬請期待第三部分:RTK查詢簡介! _
以上是完整的 Redux 工具包 - 非同步邏輯(第 -2 部分)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python和JavaScript在開發環境上的選擇都很重要。 1)Python的開發環境包括PyCharm、JupyterNotebook和Anaconda,適合數據科學和快速原型開發。 2)JavaScript的開發環境包括Node.js、VSCode和Webpack,適用於前端和後端開發。根據項目需求選擇合適的工具可以提高開發效率和項目成功率。

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。1)C 用于解析JavaScript源码并生成抽象语法树。2)C 负责生成和执行字节码。3)C 实现JIT编译器,在运行时优化和编译热点代码,显著提高JavaScript的执行效率。

Python更適合數據科學和自動化,JavaScript更適合前端和全棧開發。 1.Python在數據科學和機器學習中表現出色,使用NumPy、Pandas等庫進行數據處理和建模。 2.Python在自動化和腳本編寫方面簡潔高效。 3.JavaScript在前端開發中不可或缺,用於構建動態網頁和單頁面應用。 4.JavaScript通過Node.js在後端開發中發揮作用,支持全棧開發。

JavaScript在網站、移動應用、桌面應用和服務器端編程中均有廣泛應用。 1)在網站開發中,JavaScript與HTML、CSS一起操作DOM,實現動態效果,並支持如jQuery、React等框架。 2)通過ReactNative和Ionic,JavaScript用於開發跨平台移動應用。 3)Electron框架使JavaScript能構建桌面應用。 4)Node.js讓JavaScript在服務器端運行,支持高並發請求。
