React+Typescript項(xiàng)目環(huán)境搭建并使用redux環(huán)境的詳細(xì)過程
前幾篇文章 我們的項(xiàng)目已經(jīng)開始功能漸漸完善了
那么 我們來說最后一個(gè)點(diǎn) redux這個(gè)并不需要我們多努力 其實(shí)官方文檔給到已經(jīng)算是很全面了
我們可以直接訪問地址 TypeScript 中文手冊(cè)中文手冊(cè)和官方是一樣的 而且對(duì)我們非常友好
我們會(huì)在左側(cè)導(dǎo)航欄中找到一個(gè) React 點(diǎn)進(jìn)去
進(jìn)入之后 一直往下翻 我們就可以看到 Redux 部分
我們直接 用他這個(gè)命令去項(xiàng)目終端安裝就好了 下面也講述了為什么不需要單獨(dú)再去導(dǎo)入Redux了
我們這里在項(xiàng)目終端去引入
這里需要注意一下版本哦 反正 我發(fā)現(xiàn) react開發(fā) 除了文檔不是特別健全之外 每個(gè)版本改動(dòng)都還是不小的 經(jīng)常出現(xiàn) 一個(gè)版本提升 就寫法完全不一樣了的事
我們?cè)陧?xiàng)目src目錄下創(chuàng)建一個(gè)文件夾 叫 types下面創(chuàng)建一個(gè) index.tsx參考代碼如下
export interface IStoreState { languageName: string; enthusiasmLevel: number; }
就是簡(jiǎn)單導(dǎo)出了一個(gè)接口 接口限制要有兩個(gè)字段 languageName 字符串類型 enthusiasmlevel 數(shù)字類型
我們?cè)陧?xiàng)目src目錄創(chuàng)建一個(gè)文件夾 叫 constants
下面創(chuàng)建一個(gè) index.tsx文件
參考代碼如下
export const INCREMENT_ENTHUSIASM = 'INCREMENT_ENTHUSIASM'; export type INCREMENT_ENTHUSIASM = typeof INCREMENT_ENTHUSIASM; export const DECREMENT_ENTHUSIASM = 'DECREMENT_ENTHUSIASM'; export type DECREMENT_ENTHUSIASM = typeof DECREMENT_ENTHUSIASM;
這里聲明了兩個(gè)常量 至于type的寫法 大家可以去看一下 ts命名空間的內(nèi)容
我們簡(jiǎn)單說 通過type 聲明一個(gè)自己的字符串字面量類型
然后 我們?cè)僭陧?xiàng)目src目錄創(chuàng)建一個(gè)目錄 叫 actions
目錄下依舊創(chuàng)建一個(gè) 叫 index.tsx 的文件
參考代碼如下
import * as constants from '../constants' export interface IIncrementEnthusiasm { type: constants.INCREMENT_ENTHUSIASM; } export interface IDecrementEnthusiasm { type: constants.DECREMENT_ENTHUSIASM; } export type EnthusiasmAction = IIncrementEnthusiasm | IDecrementEnthusiasm; export function incrementEnthusiasm(): IIncrementEnthusiasm { return { type: constants.INCREMENT_ENTHUSIASM } } export function decrementEnthusiasm(): IDecrementEnthusiasm { return { type: constants.DECREMENT_ENTHUSIASM } }
然后 我們?cè)僭趕rc目錄下創(chuàng)建 reducer 文件夾
下面還是一個(gè)index.tsx
參考代碼如下
import { EnthusiasmAction } from '../actions'; import { IStoreState } from '../types/index'; import { INCREMENT_ENTHUSIASM, DECREMENT_ENTHUSIASM } from '../constants/index'; export function enthusiasm(state: IStoreState, action: EnthusiasmAction): IStoreState { switch (action.type) { case INCREMENT_ENTHUSIASM: return { ...state, enthusiasmLevel: state.enthusiasmLevel + 1 }; case DECREMENT_ENTHUSIASM: return { ...state, enthusiasmLevel: Math.max(1, state.enthusiasmLevel - 1) }; default: return state; } }
這就相當(dāng)于是我們之前 全局處理 接受/返回 的一個(gè)地方
我們分別寫了兩個(gè)事件 對(duì)應(yīng) 將 enthusiasmLevel 加一 和 減一
事件名就對(duì)應(yīng)我們上面定義的兩個(gè)變量值 DECREMENT_ENTHUSIASM與INCREMENT_ENTHUSIASM
然后 我們?cè)僭趕rc目錄下創(chuàng)建一個(gè)文件夾 store
然后下面再創(chuàng)建一個(gè) 文件 叫 index.tsx
import { createStore, Reducer } from 'redux'; import { enthusiasm } from '../reducer/index'; import { EnthusiasmAction } from '../actions/index'; import { IStoreState } from '../types/index'; const initialState: IStoreState = { enthusiasmLevel: 1, languageName: 'TypeScript' }; const store = createStore<IStoreState, EnthusiasmAction, {}, {}>(enthusiasm as Reducer<IStoreState, EnthusiasmAction>, initialState); export default store;
這個(gè) initialState 就是我們的數(shù)據(jù)來源了 里面有兩個(gè)值 分別是 enthusiasmLevel和languageName
接下來 我們重點(diǎn)就是關(guān)聯(lián)了
我們打開 src下的 index.tsx
引入
import { Provider } from "react-redux"; import store from "./store";
然后 在標(biāo)簽上 用上 Provider store 屬性 就用我們寫的 store
然后 這里 我也有點(diǎn)懶 直接就給代碼寫到 App.tsx里吧
App.tsx編寫代碼如下
import * as React from "react"; import * as actions from './actions/index'; import { IStoreState } from './types/index'; import { connect } from 'react-redux'; export interface IProps { name: string; enthusiasmLevel?: number; onIncrement?: () => void; onDecrement?: () => void; } class App extends React.Component<IProps,any> { public render() { const { name,enthusiasmLevel,onIncrement,onDecrement } = this.props; return ( <div className="App"> <p>{ name }</p> <p>{ enthusiasmLevel }</p> <button onClick={ onIncrement }>+</button> <button onClick={ onDecrement }>-</button> </div> ); } } export function mapStateToProps({ enthusiasmLevel, languageName }: IStoreState) { return { enthusiasmLevel, name: languageName, } } export function mapDispatchToProps(dispatch: any) { return { onDecrement: () => dispatch(actions.decrementEnthusiasm()), onIncrement: () => dispatch(actions.incrementEnthusiasm()) } } export default connect(mapStateToProps, mapDispatchToProps)(App);
這樣 我們運(yùn)行起項(xiàng)目 會(huì)看到 name 和 enthusiasmLevel 的展示是正常的
然后 我們操作 decrementEnthusiasm 和 incrementEnthusiasm 加減事件 我們會(huì)發(fā)現(xiàn)
雖然能夠正常執(zhí)行 但實(shí)際上 , 也是非常的好用啊
到此這篇關(guān)于React+Typescript項(xiàng)目環(huán)境中搭建并使用redux環(huán)境的文章就介紹到這了,更多相關(guān)React+Typescript項(xiàng)目搭建使用redux環(huán)境內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
React使用PropTypes實(shí)現(xiàn)類型檢查功能
這篇文章主要介紹了React高級(jí)指引中使用PropTypes實(shí)現(xiàn)類型檢查功能的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-02-02React中使用TS完成父組件調(diào)用子組件的操作方法
由于在項(xiàng)目開發(fā)過程中,我們往往時(shí)需要調(diào)用子組件中的方法,這篇文章主要介紹了React中使用TS完成父組件調(diào)用子組件,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07Redis數(shù)據(jù)結(jié)構(gòu)面試高頻問題解析
這篇文章主要為大家介紹了Redis數(shù)據(jù)結(jié)構(gòu)高頻面試問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06Antd react上傳圖片格式限制的實(shí)現(xiàn)代碼
這篇文章主要介紹了Antd react上傳圖片格式限制的實(shí)現(xiàn)代碼,本文通過實(shí)例代碼圖文效果給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2024-12-12React組件內(nèi)事件傳參實(shí)現(xiàn)tab切換的示例代碼
本篇文章主要介紹了React組件內(nèi)事件傳參實(shí)現(xiàn)tab切換的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07react用Redux中央倉(cāng)庫(kù)實(shí)現(xiàn)一個(gè)todolist
這篇文章主要為大家詳細(xì)介紹了react用Redux中央倉(cāng)庫(kù)實(shí)現(xiàn)一個(gè)todolist,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09