」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 完整的 Redux 工具包(第 1 部分)

完整的 Redux 工具包(第 1 部分)

發佈於2024-10-31
瀏覽:103

Complete Redux toolkit (Part-1)

Redux工具包的用途

我們已經知道 redux 是 JavaScript 應用程式的一個強大的狀態管理函式庫,特別是在使用 React 時。
但是使用 redux 很困難,因為它設定 redux 的程式碼很繁重。這使得維護和調試變得困難。這就是 Redux Toolkit 可以提供幫助的地方。
Redux工具包問題解決

  • 開店太複雜了。
  • 添加許多套件以與 redux 一起使用,例如中間件、工具。
  • Redux 需要太多程式碼來設定

Redux工具包是官方推薦的編寫redux邏輯的方法。它提供了一組工具來簡化開發,減少樣板程式碼,有助於使應用程式具有可擴展性和可維護性。

Redux 工具包的主要優點:

  1. 更少的樣板程式碼:不再需要動作創作者和常數。
  2. 簡化商店設定:提供單一 API 來使用合理的預設值配置商店。
  3. 對不變性和 DevTools 的內建支援:自動啟用 Redux DevTools 並與 Immer 整合以實現不變性。
  4. 更好的 TypeScript 支援:提供更好的打字並與 TypeScript 很好地整合。

我們可以將 redux 工具包與任何 javascript 庫一起使用,因此我們使用 React 設定 redux 工具包。

在 React 應用程式中設定 Redux Toolkit

第 1 步:建立一個新的 React 專案

首先,讓我們建立一個新的 React 應用程式。您可以使用 create-react-app 或 Vite 來實現此目的。為了簡單起見,我們將在這裡使用 create-react-app。

npx create-react-app redux-toolkit-example
cd redux-toolkit-example

第2步:安裝Redux工具包和React-Redux

接下來,安裝必要的軟體包:@reduxjs/toolkit和react-redux。

npm install @reduxjs/toolkit react-redux
  1. 了解切片與減速器

切片是針對應用程式特定功能的 Redux 減速器邏輯和操作的集合。 Redux Toolkit 提供了 createSlice 函數來幫助使用最少的樣板建立狀態切片。

第 1 步:建立切片
讓我們建立一個簡單的計數器切片。在 features/counter 目錄中建立一個名為 counterSlice.js 的新檔案:

// src/features/counter/counterSlice.js
import { createSlice } from '@reduxjs/toolkit';

const initialState = {
  value: 0,
};

const counterSlice = createSlice({
  name: 'counter',
  initialState,
  reducers: {
    increment: (state) => {
      state.value  = 1;
    },
    decrement: (state) => {
      state.value -= 1;
    },
    incrementByAmount: (state, action) => {
      state.value  = action.payload;
    },
  },
});

export const { increment, decrement, incrementByAmount } = counterSlice.actions;
export default counterSlice.reducer;

在這裡,我們定義了一個名為 counter 的切片,它具有初始狀態和三個減速器(increment、decrement 和incrementByAmount)。 createSlice 函數會自動為每個reducer 函數產生動作建立者。

  1. 配置 Redux Store

現在我們有了切片,讓我們配置 Redux 儲存。 Redux Toolkit 提供了一個 configureStore 函數,可以使用良好的預設值來設定儲存。

第 1 步:創建商店
在應用程式目錄中建立 store.js 檔案:

// src/app/store.js
import { configureStore } from '@reduxjs/toolkit';
import counterReducer from '../features/counter/counterSlice';

const store = configureStore({
  reducer: {
    counter: counterReducer,
  },
});

export default store;

第 2 步:為您的應用程式提供商店
將您的 React 應用程式包裝在react-redux 的元件中並將其傳遞給商店。更新index.js檔:

// src/index.js
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import { Provider } from 'react-redux';
import store from './app/store';

ReactDOM.render(
  ,
  document.getElementById('root')
);
  1. 將元件連接到 Store

要與 Redux 儲存交互,請使用react-redux 提供的 useSelector 和 useDispatch 鉤子。
第 1 步:使用 useSelector
存取狀態 使用 useSelector 鉤子從 store 存取狀態

// src/features/counter/Counter.js
import React from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { increment, decrement, incrementByAmount } from './counterSlice';

const Counter = () => {
  const count = useSelector((state) => state.counter.value);
  const dispatch = useDispatch();

  return (
    

{count}

); }; export default Counter;

第 2 步:在應用程式中使用計數器元件
在您的主應用程式元件中匯入並使用 Counter 元件:

// src/App.js
import React from 'react';
import Counter from './features/counter/Counter';

function App() {
  return (
    
); } export default App;
  1. 結論與後續步驟

在這一部分中,我們介紹了在 React 應用程式中設定 Redux Toolkit 的基礎知識,包括建立切片、配置儲存以及使用鉤子將元件連接到 Redux 儲存。在下一部分中,我們將深入研究使用 createAsyncThunk 處理非同步邏輯,以從 API 取得資料並管理不同的載入狀態。

敬請關注第 2 部分:高級 Redux 工具包 - 使用 createAsyncThunk 的非同步邏輯!

版本聲明 本文轉載於:https://dev.to/abhishekpanwarrr/complete-redux-toolkit-part-1-58ph?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • ## 使用下拉式選單時還需要 SQL 注入保護嗎?
    ## 使用下拉式選單時還需要 SQL 注入保護嗎?
    使用下拉式選單時 SQL 注入保護是否仍然適用? 人們普遍認為,應始終對使用者輸入持懷疑態度,因為SQL注入的風險。然而,出現了一個問題:這種擔憂是否會擴展到唯一用戶輸入來自下拉式選單的場景? 下拉限制和安全性雖然下拉式選單提供了預定義選項,它們不保證防止使用者輸入的惡意資料。攻擊者可以使用瀏覽器開...
    程式設計 發佈於2024-11-08
  • 可視化貓的偏好
    可視化貓的偏好
    偶然看到一篇文章,名字叫《為什麼貓…? 》,分析了貓咪的一些喜好和行為。裡面的視覺設計非常吸引我。其特點是採用手繪風格和氣泡式佈局。此外,可愛的字體也令人賞心悅目。我非常喜歡貓。我有一隻貓,名叫瓜瓜(意思是可愛又愚蠢)。同樣,我也是前端開發人員。我開發了一個名為 AntV G6 的圖形視覺化框架。因...
    程式設計 發佈於2024-11-08
  • 在黑客馬拉松中使用 Kintone 的技巧
    在黑客馬拉松中使用 Kintone 的技巧
    Introduction When you're participating in a hackathon, efficiency and quick iteration are key to success. One tool that can help you manage d...
    程式設計 發佈於2024-11-08
  • Camp Code - 一種有趣且簡單的學習程式碼的方法
    Camp Code - 一種有趣且簡單的學習程式碼的方法
    ? ?未來的程式設計傳奇,齊聚一堂!營地代碼著火了! ?? 短短 3 天(對程式設計愛好者來說這是 72 小時?): • 超過 1,300 位冒險家加入了我們的程式設計任務? • 超過 300 名勇敢的探索者創建了早期訪問帳戶來測試我們的測試版? ️ 為什麼這麼熱鬧? ? 因為 Camp Cod...
    程式設計 發佈於2024-11-08
  • 隨時隨地的套件管理器(幾天後可用。)
    隨時隨地的套件管理器(幾天後可用。)
    https://github.com/DiegoDev2/Fleet 介紹 Fleet:開發人員的簡單但功能強大的套件管理器? 作為開發人員,我們經常花費大量時間設定環境並安裝不同的工具。我創建了 Fleet 來讓這個過程更容易、更有效率。 什麼是艦隊? Fleet...
    程式設計 發佈於2024-11-08
  • 項目 檢查參數有效性
    項目 檢查參數有效性
    章節:方法設計 重點:方法設計的可用性、穩健性和靈活性。 涵蓋範圍:參數和傳回值處理、方法簽章設計和文件。 第 49 項:檢查參數有效性 - 參數限制: 方法和建構子通常對參數值有限制(例如非負索引、非空引用)。 這些限制必須在方法開始時記錄並驗證。 - 驗證的重要性: 儘早偵測錯誤,以避免...
    程式設計 發佈於2024-11-08
  • 如何在不刪除和重新建立約束的情況下重命名 MySQL 中的外鍵列?
    如何在不刪除和重新建立約束的情況下重命名 MySQL 中的外鍵列?
    重新命名MySQL 中的外鍵列:逐步指南當嘗試重命名MySQL 中充當外鍵列的列時外鍵在另一個表中時,常會遇到錯誤150,表示外鍵約束問題。為了克服這個問題,您可能會遇到這樣的問題:我們能否避免刪除外鍵、重新命名列,然後重新建立外鍵的複雜任務? 標準方法根據MySQL文件和提供的答案,最安全、最直接...
    程式設計 發佈於2024-11-08
  • Go 中如何表示介面:(值、型別)對或方法表?
    Go 中如何表示介面:(值、型別)對或方法表?
    理解 Go 中的介面表示在 Go 中使用介面時,掌握其底層表示非常重要。兩個關鍵資源闡明了這個主題,但他們的觀點不同。 「反射定律」文章(http://blog.golang.org/laws-of-reflection) 介紹了介面的概念包含一個(值,類型)對,如r io.Reader 的範例所示...
    程式設計 發佈於2024-11-08
  • JavaScript 確認對話方塊如何增強表單提交使用者體驗?
    JavaScript 確認對話方塊如何增強表單提交使用者體驗?
    JavaScript 表單提交:提示確認或取消當使用者與表單互動時,為提交表單等操作提供使用者友善的回饋至關重要。這可確保資料完整性並防止錯誤提交。在 JavaScript 中,確認對話方塊提供了一個簡單而有效的解決方案來處理表單提交。 實作表單提交的確認對話框對於一個簡單的表單驗證場景,您可以可以...
    程式設計 發佈於2024-11-08
  • 如何在 Go 中將映射編組為 XML:當出現「xml:不支援的類型:map[string]int」錯誤時該怎麼辦?
    如何在 Go 中將映射編組為 XML:當出現「xml:不支援的類型:map[string]int」錯誤時該怎麼辦?
    Go 中將映射編組為XML嘗試將映射轉換為XML 資料時,開發人員可能會遇到錯誤,指出「xml: 不支援的類型:map[string] int。 此問題的一個解決方案是利用 xml.Marshaler 介面。透過建立自訂 StringMap 類型並實作 MarshalXML,您可以控制映射如何序列化...
    程式設計 發佈於2024-11-08
  • 如何使用簡單的 HTML DOM 從 HTML 內容中刪除圖片元素?
    如何使用簡單的 HTML DOM 從 HTML 內容中刪除圖片元素?
    使用簡單 HTML DOM 刪除元素您有一個任務,需要使用簡單 HTML DOM 從文章中刪除所有圖像元素。目標是為新聞滾動條顯示創建簡潔的文字片段。 要實現此目的,您可以按照以下步驟操作:1.取得HTML 字串內容取得HTML 格式字串形式的文章內容。 2.刪除圖像標籤簡單的 HTML DOM 沒...
    程式設計 發佈於2024-11-08
  • 責任鏈
    責任鏈
    顧名思義,責任鏈創建了一系列接收者物件來處理請求。 此模式根據請求類型將請求的發送者和接收者解耦。 該模式屬於行為模式。 在此模式中,請求的每個接收者物件都有一個對下一個物件的引用,如果它無法處理該請求,則該請求將被傳遞到鏈中的下一個接收者。 讓我們以基於訊息(請求)層級記錄訊息的日誌記錄機...
    程式設計 發佈於2024-11-08
  • 為什麼 requestAnimationFrame 對於動畫優於 setInterval 和 setTimeout?
    為什麼 requestAnimationFrame 對於動畫優於 setInterval 和 setTimeout?
    為什麼requestAnimationFrame 比setInterval 或setTimeout 更好雖然setInterval 和setTimeout 都可以用於動畫任務,但出於多種原因,requestAnimationFrame 通常被認為是更好的選擇。 1。與顯示更新率同步requestAn...
    程式設計 發佈於2024-11-08
  • React Hooks 範例
    React Hooks 範例
    Introduction: Embracing the Power of React Hooks Hey there, fellow UI developer! Are you ready to dive into the exciting world of React Hooks...
    程式設計 發佈於2024-11-08
  • 如何在 PDO 中有效地使用帶有 LIMIT 子句的陣列參數
    如何在 PDO 中有效地使用帶有 LIMIT 子句的陣列參數
    利用 PDO 陣列參數和 LIMIT 子句在 PHP 中,使用 PDO 執行具有參數陣列和 LIMIT 子句的資料庫查詢可能會帶來挑戰。讓我們探討一下如何有效地解決這種情況。 背景:在利用陣列將參數傳遞給 PDO 語句時嘗試使用 LIMIT 子句執行查詢時會出現此問題。預設情況下,LIMIT子句中的...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3