国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Redux Toolkit+TypeScript最佳實踐

這篇具有很好參考價值的文章主要介紹了Redux Toolkit+TypeScript最佳實踐。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Redux-Toolkit是為了簡化使用Redux繁瑣的步驟,可以j降低使用useReducer與useContext管理狀態(tài)的頻率,而且起到項目中狀態(tài)管理規(guī)范和約束化的效果。

閱讀本文需要的前置知識:React、Redux、Typescript、Redux hooks。

Redux-Toolkit使用步驟

目前使用Redux-Toolkit管理消費redux狀態(tài)的方式。舉個例子,假設(shè)我們現(xiàn)在的業(yè)務(wù)和銀行轉(zhuǎn)賬有關(guān),有兩個狀態(tài)存在redux,分別為銀行賬號和金額:accountOfBank和amountOfBank,使用createSlice來創(chuàng)建reducer和actions:

首先安裝redux-toolkit依賴包,

npm i @reduxjs/toolkit

npm i react-redux

文件目錄

slice.ts

創(chuàng)建切片,聲明存儲狀態(tài)對象以及action。createSlice創(chuàng)建一個切片(slice),主要參數(shù):

  • name:slice的標識,在redux-devtool中會顯示對應的名字;
  • initialState:初始值,對象;
  • reducers:對象類型以及函數(shù)類型(函數(shù)參數(shù):state和傳遞的action參數(shù));
  • extraReducers:用于處理異步,比如網(wǎng)絡(luò)請求等;

creactSlice返回值是一個對象,包含所有的actions。?

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

type InitialState = {
    accountOfBank: string,
    amountOfBank: string
}


const initialState: InitialState = {
    accountOfBank: 'JanPan Bank',
    amountOfBank: '1000'
}

const slice = createSlice({
    name: 'bank',
    initialState,
    reducers: {
        updateBankAccount: (state: InitialState, action: PayloadAction<string>) => {
            state.accountOfBank = action.payload;
        },
        updateBankAmount: (state: InitialState, action: PayloadAction<string>) => {
            state.amountOfBank = action.payload;
        }
    }
})

export const {updateBankAccount, updateBankAmount} = slice.actions;
export default slice.reducer;

?store.ts

存在在store中,configureStore是Redux-Tookit的一個工廠函數(shù),用于創(chuàng)建Redux-Store。

store是通過傳入一個reducer(縮減器)來創(chuàng)建的,并通過getState的方法,用于返回當前的狀態(tài)值,在Typescript強類型聲明中有很大的幫助。

configureStore主要參數(shù),

  • reducer:將slice的reducer傳入;
  • middleware:中間件;
  • devTools:是否配置devTools工具,默認為true;
import { configureStore } from "@reduxjs/toolkit";
import slice from './slice';

export const store = configureStore({
    reducer: {
        bank: slice
    }
})

export type BankState = ReturnType<typeof store.getState>;

index.tsx

import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import { Provider } from "react-redux";
import { store } from "./toolkit/store";
const root = ReactDOM.createRoot(
  document.getElementById('root') as HTMLElement
);
root.render(
    <Provider store={store}>
        <App />
    </Provider>
);

BankView.tsx

頁面UI組件渲染,useSelector獲取當前管理的state,state的類型可通過store.ts的getState獲取,

并且將配置在store的reducer提取解構(gòu)。

import { useDispatch, useSelector } from "react-redux";
import { BankState } from "../../toolkit/store";
import { updateBankAccount, updateBankAmount } from "../../toolkit/slice";

export const BankView = () => {
    const {accountOfBank, amountOfBank} = useSelector((state: BankState) => state.bank)

    const dispatch = useDispatch();

    return (
        <div>
            <h3>accountOfBank - {accountOfBank}</h3>
            <h3>amountBank - {amountOfBank}</h3>
            <button onClick={() => dispatch(updateBankAccount('England'))}>
                change bank account
            </button>
            <span>  </span>
            <button onClick={() => dispatch(updateBankAmount('2000'))}>
                change bank amount
            </button>
        </div>
    )
}

詳細目錄截圖如下,

Redux Toolkit+TypeScript最佳實踐,typescript,javascript,前端

經(jīng)過上面簡單的封裝就實現(xiàn)了全局狀態(tài)管理,使用簡單高效,而且可以實現(xiàn)業(yè)務(wù)與UI的解耦。

在網(wǎng)絡(luò)請求等情況通常需要異常更新、提交數(shù)據(jù)等,可通過createAynceThunk實現(xiàn),

import { createAsyncThunk, createSlice, PayloadAction } from '@reduxjs/toolkit';

type InitialState = {
    accountOfBank: string,
    amountOfBank: string,
    creatTime: string
}


const initialState: InitialState = {
    accountOfBank: 'JanPan Bank',
    amountOfBank: '1000',
    creatTime: '2024-04-02'
}


export const fetchAccountBank = createAsyncThunk(
    'https://wwww.baidu.com',
    () => {
        return new Promise<string>(resolve => {
            let timeId = setTimeout(() => {
                clearTimeout(timeId);
                resolve('2024-04-03');
            }, 1000)
        })
    })

const slice = createSlice({
    name: 'bank',
    initialState,
    reducers: {
        updateBankAccount: (state: InitialState, action: PayloadAction<string>) => {
            state.accountOfBank = action.payload;
        },
        updateBankAmount: (state: InitialState, action: PayloadAction<string>) => {
            state.amountOfBank = action.payload;
        }
    },
    extraReducers: (builder) => {
        builder.addCase(fetchAccountBank.pending, (state: InitialState) => {
            console.log('fetchAccountBank pending')
            state.creatTime = 'loading...'
        });
        builder.addCase(fetchAccountBank.fulfilled, (state, action) => {
            console.log(action.payload)
            state.creatTime = action.payload;
            console.log('fetchAccountBank fulfilled')
        });
        builder.addCase(fetchAccountBank.rejected, (state) => {
            console.log('fetchAccountBank rejected')
            state.creatTime = 'failed...'
        })
    }
})

export const {updateBankAccount, updateBankAmount,} = slice.actions;
export default slice.reducer;

因為Typescript語言有較強的類型校驗,在異步時dispatch報錯,如下

Redux Toolkit+TypeScript最佳實踐,typescript,javascript,前端

只需在使用useDispatch時,聲明泛型類型即可。

    // 異步需聲明useDispatch類型
    const asyncDispatch = useDispatch<AppDispatch>();

最佳實踐全部代碼如下:

ReduxToolkit+TypeScript最佳實踐資源-CSDN文庫文章來源地址http://www.zghlxwxcb.cn/news/detail-844631.html

到了這里,關(guān)于Redux Toolkit+TypeScript最佳實踐的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 基于 Redux + TypeScript 實現(xiàn)強類型檢查和對 Json 的數(shù)據(jù)清理

    基于 Redux + TypeScript 實現(xiàn)強類型檢查和對 Json 的數(shù)據(jù)清理

    突然像是打通了任督二脈一樣就用了 generics 搞定了之前一直用 any 實現(xiàn)的類型…… 關(guān)于 Redux 的部分,這里不多贅述,基本的實現(xiàn)都在這里:Redux Toolkit 調(diào)用 API 的四種方式 和 async thunk 解決 API 調(diào)用的依賴問題。 之前的實現(xiàn)方法是這個:TS 使用自動提示生成對象中的鍵,不過

    2024年02月14日
    瀏覽(15)
  • 服務(wù)端使用ASP.NET Core SignalR與Vue3(TypeScript與JavaScript)前端建立通信(以進度條為例)

    服務(wù)端使用ASP.NET Core SignalR與Vue3(TypeScript與JavaScript)前端建立通信(以進度條為例)

    1. ASP.NET Core ? ? ? ? ? ASP.NET Core 是一個跨平臺、高性能及開源的框架,用于生成基于云且連接互聯(lián)網(wǎng)的新式應用程式。 官方文檔:ASP.NET documentation | Microsoft Learn ?2.? ASP.NET Core SignalR ? ? ? ? ASP.NET Core SignalR 是開源庫,用于服務(wù)端與客戶端建立實時通信,可以自動管理連接

    2024年02月06日
    瀏覽(22)
  • 前端2023最全面試題(javaScript、typeScript、vue2、vue3、html、css、uniapp、webpack、vite、react)

    答案:JavaScript中的閉包是一種函數(shù),它有權(quán)訪問其詞法環(huán)境的變量和其它函數(shù)。這意味著,即使其包含它的函數(shù)已經(jīng)執(zhí)行完畢,其詞法環(huán)境仍然存在,因此可以訪問其作用域內(nèi)的變量。 答案:回調(diào)函數(shù)是在某個特定事件之后執(zhí)行的函數(shù)。在JavaScript中,通常使用回調(diào)函數(shù)來處

    2024年02月06日
    瀏覽(34)
  • TypeScript與JavaScript

    TypeScript與JavaScript

    博主作品: 《Java項目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+MySQL+Vue等前后端分離項目,可以在左邊的分類專欄找到更多項目?!禪niapp項目案例》有幾個有uniapp教程,企業(yè)實戰(zhàn)開發(fā)。《微服務(wù)實戰(zhàn)》專欄是本人的實戰(zhàn)經(jīng)驗總結(jié),《Spring家族及微服務(wù)系列》專注Spring、SpringMV

    2024年02月05日
    瀏覽(29)
  • 《前端面試題》- TypeScript - TypeScript的優(yōu)/缺點

    簡述TypeScript的優(yōu)/缺點 優(yōu)點 增強了代碼的可讀性和可維護性 包容性,js可以直接改成ts,ts編譯報錯也可以生成js文件,兼容第三方庫,即使不是ts編寫的 社區(qū)活躍,完全支持es6 缺點 增加學習成本 增加開發(fā)成本,因為增加了類型定義 需要編譯,類型檢查會增加編譯時長,語

    2024年04月23日
    瀏覽(24)
  • 單例模式——javascript和typescript

    確保某個方法或者類只有一個是咧。而且自行實例子并向整個系統(tǒng)提供這個實例。 某個方法或類只能一個; 必須自行創(chuàng)建這個實例 必須自行向整個系統(tǒng)提供這個實例。

    2024年02月05日
    瀏覽(20)
  • 一文了解JavaScript 與 TypeScript的區(qū)別

    一文了解JavaScript 與 TypeScript的區(qū)別

    TypeScript 和 JavaScript 是兩種互補的技術(shù),共同推動前端和后端開發(fā)。在本文中,我們將帶您快速了解JavaScript 與 TypeScript的區(qū)別。 ? 一、TypeScript 和 JavaScript 之間的區(qū)別 JavaScript 和 TypeScript 看起來非常相似,但有一個重要的區(qū)別。 JavaScript 和 TypeScript 之間的主要區(qū)別在于 JavaS

    2024年02月14日
    瀏覽(23)
  • React + TypeScript 實踐

    React + TypeScript 實踐

    主要內(nèi)容包括準備知識、如何引入 React、函數(shù)式組件的聲明方式、Hooks、useRefT、useEffect、useMemoT / useCallbackT、自定義 Hooks、默認屬性 defaultProps、Types or Interfaces、獲取未導出的 Type、Props、常用 Props ts 類型、常用 React 屬性類型、Forms and Events、onSubmit、Operators、Tips、不要在 typ

    2024年02月13日
    瀏覽(20)
  • TypeScript:為什么JavaScript需要類型檢查?

    JavaScript是當今最為流行的編程語言之一。它是一種高級的、解釋性的編程語言,用于Web應用程序的開發(fā)。然而,JavaScript的靈活性也是它的弱點之一。JavaScript中的變量、函數(shù)、類等都是動態(tài)類型,這意味著它們的類型可以在運行時發(fā)生變化。雖然這種靈活性為JavaScript開發(fā)人員

    2024年02月04日
    瀏覽(21)
  • React框架:TypeScript支持的JavaScript庫

    React 框架是一個功能強大的 JavaScript 庫,讓用戶可以輕松地構(gòu)建高度動態(tài)的用戶界面。它借助虛擬 DOM 的思想實現(xiàn)高效的性能,并具有易于使用和靈活的編程接口。隨著越來越多的人開始使用 React ,在不斷的發(fā)展和變化中, React 框架現(xiàn)在加入了 TypeScript 的支持,使其成為一個

    2024年02月11日
    瀏覽(37)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包