最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React?中使用?Redux?Toolkit?狀態(tài)管理的實踐

 更新時間:2025年09月04日 09:27:14   作者:自信的飛  
本文主要介紹了Redux的核心概念及Redux?Toolkit的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Redux的核心概念

Redux的核心概念包括Store、Action、Reducer、State和Dispatch。

  • State 是 Redux Store 中的數(shù)據(jù)結(jié)構(gòu),代表應(yīng)用的整個狀態(tài)。在 Redux 中,State 是只讀的,任何更新 State 的操作都必須通過 Reducer 來完成,確保狀態(tài)的不可變性。
  • Action 是一種描述應(yīng)用中發(fā)生了什么的 JavaScript 對象。每個 Action 通常包含一個 type 屬性,用于指明 Action 的類型,此外還可以包含其他有用的屬性(如 payload),以提供更詳細的信息。Action 通常通過 createAction 函數(shù)或 dispatch 方法生成。
  • Reducer 是 Redux 的核心部分。它是一個純函數(shù),接收當(dāng)前的狀態(tài)(state)和一個 Action,并返回一個新的狀態(tài)。Reducer 不會直接修改傳入的 state,而是基于當(dāng)前狀態(tài)和 Action 創(chuàng)建并返回一個新的狀態(tài)。
  • Dispatch 是一種方法,用于將 Action 分發(fā)給 Reducer。每當(dāng)你想要修改應(yīng)用的狀態(tài)時,都需要通過 Dispatch 來觸發(fā) Action,從而引發(fā)狀態(tài)的更新。

在現(xiàn)代 React 應(yīng)用程序中,狀態(tài)管理是一個至關(guān)重要的部分。使用 Redux Toolkit 可以簡化 Redux 的配置和管理。本文將通過三個文件的示例,詳細講解如何使用 Redux Toolkit 創(chuàng)建和管理一個簡單的計數(shù)器狀態(tài),并通過類比源 store 和根 store 的概念,加以更好地理解。

一、什么是源 Store 和根 Store?

這里只是自己覺得這樣定義會更好理解一些,實際并沒有這樣的概念

源 Store

源 store 是模塊化的狀態(tài)管理單元,負責(zé)特定功能的狀態(tài)和操作。使用 createSlice 創(chuàng)建的 slice 就是源 store。

類比:可以想象成一個專注于特定產(chǎn)品的車間,例如一個玩具制造車間。它只負責(zé)制造特定類型的玩具(如計數(shù)器的狀態(tài)管理),并且有自己的一套操作流程(增、減、重置)。

根 Store

根 store 是整個應(yīng)用的狀態(tài)管理中心,使用 configureStore 組合多個源 store。它負責(zé)將所有的狀態(tài)和邏輯集中起來,提供給整個應(yīng)用使用。

類比:可以想象成一個大型工廠,里面有多個車間(源 store)。有負責(zé)制造玩具的,有負責(zé)制造家具的。。。這個工廠負責(zé)管理和協(xié)調(diào)各個車間的生產(chǎn),并且能夠根據(jù)需求調(diào)整生產(chǎn)線(即添加或修改源 store)。

二、創(chuàng)建 Counter Store

2.1 定義源 Store

在一個新的文件 counterSlice.js 中,我們將創(chuàng)建計數(shù)器的 slice:

//  store/modules/xxx.js

import { createSlice } from '@reduxjs/toolkit';

// 創(chuàng)建一個 slice
const counterSlice = createSlice({
  name: 'counter',  // 定義 slice 的名稱
  initialState: {   // 初始化狀態(tài)
    count: 0,       // 需要被全局維護的數(shù)據(jù)
  },
  reducers: {       // 定義修改狀態(tài)的方法
    increment(state) {
      state.count += 1;  // 增加計數(shù)
    },
    decrement(state) {
      state.count -= 1;  // 減少計數(shù)
    },
    reset(state) {
      state.count = 0;    // 重置計數(shù)
    },
  },
});

// 導(dǎo)出 action 對象
export const { increment, decrement, reset } = counterSlice.actions;

// 導(dǎo)出 reducer 函數(shù)
export const counterReducer = counterSlice.reducer;

在這個例子中,counterSlice 就是我們的源 store,它初始化了一個 count 狀態(tài),并提供了三個 reducers 來修改這個狀態(tài)。

三、組合 Store(根)

在另一個文件 store.js 中,我們將使用 configureStore 來組合根 store,并把 counterReducer 傳入:

// store/index.js

import { configureStore } from '@reduxjs/toolkit';
import { counterReducer } from './counterSlice';

// 創(chuàng)建根 store
const store = configureStore({
  reducer: {
    counter: counterReducer,  // 將源 reducer 組合到根 store 中
  },
});

export default store;

這里,store 就是我們的根 store,它可以容納多個源 store(在本例中只有 counter),并將它們組合在一起進行集中管理。

根store中可以定義多個源store,這里只示例一個

四、連接 React 和 Redux

我們目前只是使用了源store中的reducer函數(shù)來組合根store,還有定義導(dǎo)出的源store中的action對象并沒有使用

現(xiàn)在我們已經(jīng)定義了 store,但還需要將其鏈接到我們的 React 應(yīng)用中。我們將使用 react-redux 中的 Provider 組件來實現(xiàn)這一點。

4.1 綁定 Store(為組件注入store)

index.jsApp.js 中,我們將 Provider 組件包裹住我們的應(yīng)用:

// index.js

import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import store from './store';
import App from './App';

ReactDOM.render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.getElementById('root')
);

4.2 使用 Store 中的數(shù)據(jù)(調(diào)用觸發(fā))

在我們的組件中,使用 useSelector 鉤子來訪問 store 中的狀態(tài),并使用 useDispatch 鉤子來觸發(fā) action。

// App.js

import React from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { increment, decrement, reset } from './counterSlice';

const Counter = () => {
  const count = useSelector(state => state.counter.count);  // 獲取狀態(tài)
  const dispatch = useDispatch();  // 獲取 dispatch 函數(shù)

  return (
    <div>
      <h1>Count: {count}</h1>
      <button onClick={() => dispatch(increment())}>Increment</button>
      <button onClick={() => dispatch(decrement())}>Decrement</button>
      <button onClick={() => dispatch(reset())}>Reset</button>
    </div>
  );
};

export default Counter;

在這個組件中,我們通過 useSelector 獲取 count 狀態(tài),并通過 useDispatch 觸發(fā) increment、decrementreset 這三個 action。

總結(jié)

通過以上步驟,我們成功使用 Redux Toolkit 創(chuàng)建了一個簡單的計數(shù)器應(yīng)用。整個過程包括:

  1. 定義源 store(創(chuàng)建 slice)。
  2. 將源 store 組合到根 store 中。
  3. 通過 Provider 注入 store 到 React 應(yīng)用中。
  4. 使用 useSelectoruseDispatch 連接組件與 store,實現(xiàn)狀態(tài)管理。

擴展:

1.action傳參:

  1. 對源store的reducer中的action對象多傳遞一個action參數(shù),這個參數(shù)就是我們觸發(fā)方法傳遞的數(shù)據(jù)了
  2. 通過action.payload拿到數(shù)據(jù)
    addToNum(state, action) {
        state.count = action.payload
    }

調(diào)用觸發(fā)

dispatch(addToNum(20))

2.異步操作獲取數(shù)據(jù)

(1).在源store外面定義一個異步函數(shù)并暴露出去,異步函數(shù)中調(diào)用dispatch()

dispatch中傳遞源store中reducer中的action對象

// channelStore.js (源)

// 解構(gòu)出action對象
const {setChannel} = channelStore.actions

// 封裝函數(shù)
const fetchChannelList = ()=>{
    return async(dispatch) =>{
        const res = await.get(url) // url是請求后端的地址
        // setChannel是源store在reducer中定義的action對象
        dispatch(setChannel(res.data.channels))
    }
}

注意,因為給action對象傳遞參數(shù)了,所以參考上面的action傳參,需要源store中的action對象多定義一個action形參來接收數(shù)據(jù)

// channelStore.js (源)

reducers:{
        setChannels(state,action){
        state.channelList = action.payload
    }
}

(2).在需要的地方調(diào)用:

// App.js

const dispatch = useDispatch()
useEffect(()=>{
    dispatch(fetchChannelList())
},[dispatch]

到此這篇關(guān)于React 中使用 Redux Toolkit 狀態(tài)管理的文章就介紹到這了,更多相關(guān) Redux Toolkit 狀態(tài)管理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • react-dnd?API拖拽工具詳細用法示例

    react-dnd?API拖拽工具詳細用法示例

    這篇文章主要為大家介紹了react-dnd?API拖拽工具的詳細用法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • 前端使用 React Query 管理“服務(wù)器狀態(tài)”的方法

    前端使用 React Query 管理“服務(wù)器狀態(tài)”的方法

    文章介紹了如何安裝和使用React Query來管理服務(wù)器狀態(tài),文章提供了一個實戰(zhàn)項目示例,展示了如何使用React Query來實現(xiàn)獲取、新增、刪除和自動刷新Todo列表等功能,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • 使用react-activation實現(xiàn)keepAlive支持返回傳參

    使用react-activation實現(xiàn)keepAlive支持返回傳參

    本文主要介紹了使用react-activation實現(xiàn)keepAlive支持返回傳參,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • React-hook-form-mui基本使用教程(入門篇)

    React-hook-form-mui基本使用教程(入門篇)

    react-hook-form-mui可以幫助開發(fā)人員更輕松地構(gòu)建表單,它結(jié)合了React?Hook?Form和Material-UI組件庫,使用react-hook-form-mui,開發(fā)人員可以更快速地構(gòu)建表單,并且可以輕松地進行表單驗證和數(shù)據(jù)處理,本文介紹React-hook-form-mui基本使用,感興趣的朋友一起看看吧
    2024-02-02
  • 通過React-Native實現(xiàn)自定義橫向滑動進度條的 ScrollView組件

    通過React-Native實現(xiàn)自定義橫向滑動進度條的 ScrollView組件

    開發(fā)一個首頁擺放菜單入口的ScrollView可滑動組件,允許自定義橫向滑動進度條,且內(nèi)部渲染的菜單內(nèi)容支持自定義展示的行數(shù)和列數(shù),在內(nèi)容超出屏幕后,渲染順序為縱向由上至下依次排列,對React Native橫向滑動進度條相關(guān)知識感興趣的朋友一起看看吧
    2024-02-02
  • 簡化Cocos和Native交互利器詳解

    簡化Cocos和Native交互利器詳解

    這篇文章主要為大家介紹了簡化Cocos和Native交互利器詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • react如何實現(xiàn)篩選條件組件

    react如何實現(xiàn)篩選條件組件

    這篇文章主要介紹了react如何實現(xiàn)篩選條件組件問題,具有很好的參考價價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 基于React實現(xiàn)倒計時功能

    基于React實現(xiàn)倒計時功能

    這篇文章主要為大家詳細介紹了如何基于React實現(xiàn)倒計時功能,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考一下
    2024-02-02
  • 關(guān)于react-router的幾種配置方式詳解

    關(guān)于react-router的幾種配置方式詳解

    本篇文章主要介紹了關(guān)于react-router的幾種配置方式詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • React利用props的children實現(xiàn)插槽功能

    React利用props的children實現(xiàn)插槽功能

    React中并沒有vue中的?slot?插槽概念?不過?可以通過props.children?實現(xiàn)類似功能,本文為大家整理了實現(xiàn)的具體方,需要的可以參考一下
    2023-07-07

最新評論

贵溪市| 通海县| 盐源县| 武清区| 沁源县| 江永县| 永定县| 和政县| 宝清县| 利津县| 临猗县| 随州市| 绥中县| 庐江县| 华坪县| 东至县| 沅江市| 宜兰县| 微博| 广平县| 佳木斯市| 海林市| 泰宁县| 新龙县| 望都县| 赤城县| 锦屏县| 贵州省| 恩施市| 石景山区| 甘孜县| 浏阳市| 定兴县| 九龙城区| 三台县| 石屏县| 鸡西市| 察隅县| 斗六市| 乐昌市| 瓦房店市|