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

React--》Redux Toolkit的使用講解

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

目錄

Redux Toolkit

redux toolkit的基本使用

RTK代碼模塊化

RTK QUERY的使用

useQuery參數


Redux Toolkit

Redux Toolkit是Redux的工具包,簡稱RTK,可以幫助我們處理使用Redux過程中的重復性工作,簡化Redux中的各種操作,當然博主也不可能將RTK講解的面面俱到,看完本篇文章后還是推薦大家多多看一下 官方文檔 ,無論是RTK還是Redux,在React中使用 react-redux 都是必不可少的,所以使用RTK依然需要安裝兩個包,如下:

npm install react-redux @reduxjs/toolkit

redux toolkit的基本使用

官方已經給出我們使用redux toolkit的基本示例了,如下圖所示,在這里我結合官方給出的示例簡單的說明并講解一下函數的使用。

React--》Redux Toolkit的使用講解

根據官方給出的基礎案例,在src文件夾下新建文件夾store,然后新建index.jsx文件,并寫出如下代碼:

// 使用RTK創(chuàng)建store, createSlice 創(chuàng)建reducer的切片
import { configureStore, createSlice } from "@reduxjs/toolkit";
const stuSlice = createSlice({ // 需要一個配置對象作為參數,通過對象的不同屬性來指定它的配置
  name:'stu', // 用來自動生成 action 中的 type
  initialState:{ // state的初始值
    name:"張三",
    age:18,
    gender:"男",
    address:"北京"
  },
  // 指定state的各種操作,直接在對象中添加方法
  reducers:{
    setName: state => { // state是一個代理對象,可直接修改
      state.name = "李四"
    },
    setAge: state => {
      state.age = 28
    }
  }
})
// 切片對象會自動的幫助我們生成action
export const { setName,setAge } = stuSlice.actions
// 創(chuàng)建store,用來創(chuàng)建store對象,需要一個配置對象作為參數
const store = configureStore({
  reducer:{
    student:stuSlice.reducer
  }
})
export default store

要想在全局使用store文件中定義的數據和方法,需要在入口文件main.js文件中進行如下操作:

import ReactDOM from 'react-dom/client'
import App from './App.jsx'
import { Provider } from 'react-redux'
import store from './store'

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

接下里通過調用redux相關api來獲取數據和方法。

import { useSelector,useDispatch } from "react-redux"
import { setName,setAge } from "./store"
const App = () => {
  // useSelector() 用來加載state中的數據
  const student = useSelector(state => state.student)
  // 通過useDispatch() 來獲取派發(fā)器對象
  const dispatch = useDispatch()
  const changeName = () =>{ 
    dispatch(setName())
  }
  const changeAge = () =>{ 
    dispatch(setAge())    
  }
  return (
    <div>
      <p>{student.name}--{student.age}--{student.gender}--{student.address}</p>
      <button onClick={changeName}>修改名字</button>
      <button onClick={changeAge}>修改年齡</button>
    </div>
  )
}
export default App

React--》Redux Toolkit的使用講解

如果想通過傳參的方式進行修改數據的話,可以采用以下這種方式:

React--》Redux Toolkit的使用講解

RTK代碼模塊化

因為state的數據可能不止一種,將每一種數據都存放在store的一個文件中就會顯得代碼特別的臃腫,后期難以維護,為了便于今后的管理,可以對RTK代碼進行模塊化劃分,也就是說,每一個數據都有單獨的文件,最后所有的文件都整合到store文件夾下的index文件中,如下:

將我設置好的兩個store數據單獨抽離出去:

import { createSlice } from "@reduxjs/toolkit";
// 創(chuàng)建學生切片
const stuSlice = createSlice({ // 需要一個配置對象作為參數,通過對象的不同屬性來指定它的配置
  name:'stu', // 用來自動生成 action 中的 type
  initialState:{ // state的初始值
    name:"張三",
    age:18,
    gender:"男",
    address:"北京"
  },
  // 指定state的各種操作,直接在對象中添加方法
  reducers:{
    setName: (state,action) => { // state是一個代理對象,可直接修改
      state.name = action.payload
    },
    setAge: (state,action) => {
      state.age = action.payload
    }
  }
})
// 切片對象會自動的幫助我們生成action
export const { setName,setAge } = stuSlice.actions
export const { reducer:stuReducer } = stuSlice
import { createSlice } from "@reduxjs/toolkit";
// 創(chuàng)建學校切片
const schoolSlice = createSlice({
  name:"school",
  initialState:{
    name:'北京大學',
    address:'北京市',
  },
  reducers:{
    setName: (state,action) => {
      state.name = action.payload
    },
    setAddress: (state,action) => {
      state.address = action.payload
    }
  }
})
export const { setName,setAddress } = schoolSlice.actions
export const { reducer:schoolReducers  } = schoolSlice

將抽離出去的數據都存放在store文件夾下的index.jsx文件中,如下:

// 使用RTK創(chuàng)建store,用于管理所有數據的文件
import { configureStore } from "@reduxjs/toolkit"; 
import { stuReducer } from "./student";
import { schoolReducers } from "./school";

// 創(chuàng)建store,用來創(chuàng)建store對象,需要一個配置對象作為參數
const store = configureStore({
  reducer:{
    student:stuReducer,
    school:schoolReducers
  }
})
export default store

在相關組件中調用該store中的數據:

import { useSelector,useDispatch } from "react-redux"
import { setName,setAge } from "./store/student"
import { setAddress,setName as setSchoolName } from "./store/school"

const App = () => {
  // useSelector() 用來加載state中的數據
  const { student,school } = useSelector(state => state)
  // 通過useDispatch() 來獲取派發(fā)器對象
  const dispatch = useDispatch()
  const changeName = () =>{ 
    dispatch(setName("王五"))
  }
  const changeAge = () =>{ 
    dispatch(setAge(30))    
  }
  const changeSchoolName = () =>{ 
    dispatch(setSchoolName("五道口職業(yè)技術學院"))
  }
  const changeSchoolAddress = () =>{ 
    dispatch(setAddress("海淀區(qū)"))
  }
  return (
    <div>
      <h2>個人信息:</h2>
      <p>{student.name}--{student.age}--{student.gender}--{student.address}</p>
      <button onClick={changeName}>修改個人名字</button>
      <button onClick={changeAge}>修改個人年齡</button>
      <h2>學校信息:</h2>
      <p>{school.name}--{school.address}</p>
      <button onClick={changeSchoolName}>修改學校名字</button>
      <button onClick={changeSchoolAddress}>修改學校地址</button>
    </div>
  )
}
export default App

可以看到上文進行抽離的代碼給人的感覺是十分干練整潔的,十分便于維護,結果如下:

React--》Redux Toolkit的使用講解

RTK QUERY的使用

RTK不僅幫助我們解決了state問題,同時它還為我們提供了RTK Query用來幫助我們處理數據加載問題,RTK Query是一個強大的數據獲取和緩存工具,在它的幫助下,Web應用中的加載變得十分簡單,它使我們不再需要自己編寫虎丘數據和緩存數據的邏輯。

要知道在Web應用中加載數據時需要處理的問題

1)根據不同的加載狀態(tài)顯示不同的UI組件

2)減少對相同數據重復發(fā)送請求

3)使用樂觀更新,提示用戶體驗

4)在用戶與UI交互時,管理緩存的聲明周期

這些問題RTKQ都可以幫助我們處理,首先可以直接通過RTKQ向服務器發(fā)送請求加載數據,并且RTKQ會自動對數據進行緩存,避免重復發(fā)送不必要的請求,其次RTKQ在發(fā)送請求時會根據請求不同的狀態(tài)返回不同的值,我們可以通過這些值來監(jiān)視請求發(fā)送的過程并隨時中止

RTKQ已經繼承在了RTK中,如果我們已經在項目中引入了RTK則無需再引入其余的模塊,如果你不想使用RTKQ給我們提供的發(fā)送請求的方式(簡單封裝過的fetch),需要自己引入要使用的發(fā)送請求的工具。ok接下來開始講解如何使用RTKQ,如下:

在store文件中新建一個word文件用于獲取名言警句的接口,如下:

import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react' 

// 創(chuàng)建Api對象,createApi()用來創(chuàng)建RTKQ中的API對象
const wordApi = createApi({
  reducerPath:'wordApi', // Api的標識,不能和其他的Api或reducer重復
  baseQuery: fetchBaseQuery({ // 指定查詢的基礎信息,發(fā)送請求使用的工具
    baseUrl:"https://api.uixsj.cn/"
  }), 
  // build是請求的構造器,通過build來設置請求的相關信息
  endpoints(build){
    return {
      getStudents:build.query({
        query(){
          // 用來指定請求的子路徑
          return 'hitokoto/get' 
        }
      })
    }
  }
})

// Api對象創(chuàng)建后,對象中會根據各種方法自動是生成對應的鉤子函數,通過這些鉤子函數,可向服務器發(fā)送請求
// 鉤子函數的命名規(guī)則 getStudents --> useGetStudentsQuery
export const { useGetStudentsQuery } = wordApi
export default wordApi

填寫完接口文件后,在store文件夾下的index.jsx文件中進行引入:

import { configureStore } from "@reduxjs/toolkit";
import wordApi from "./word";

const store = configureStore({
  reducer:{
    [wordApi.reducerPath]:wordApi.reducer
  },
  // 添加一個中間件,這個中間件已自動生成了我們直接引入即可,中間件用來處理Api緩存
  middleware:getDefaultMiddleware => {
    return getDefaultMiddleware().concat(wordApi.middleware)
  }
})

export default store

當然這里的話我們也需要在入口文件中進行store傳入:

React--》Redux Toolkit的使用講解

接下來開始使用我們創(chuàng)建的鉤子函數進行相關數據的調用,如下:

React--》Redux Toolkit的使用講解

React--》Redux Toolkit的使用講解

currentData:undefined? // 當前參數的最新數據

data:undefined????????????? // 最新的數據

isError:false????????????????? // 布爾值,是否有錯誤

error:Error()????????????????? // 對象,有錯時才存在

isFetching:true???????????? // 布爾值,數據是否在加載

isLoading:true????????????? // 布爾值,數據第一次加載成功

isSuccess:false??????????? // 布爾值,請求是否成功

isUninitialized:false????? // 布爾值,請求是否還沒有開始發(fā)送

refetch:f()???????????????????? // 一個函數,用來重新加載數據

status:"pending"????????? // 字符串,請求的狀態(tài)

因為我調用的接口沒有data數據,數據在error中,這里的話需要我們在error進行數據的獲?。?/p>

import { useGetStudentsQuery } from './store/word'

const App = () => {
  // 調用Api查詢數據,這個鉤子函數它會返回一個對象作為返回值,請求過程中相關數據都在該對象中
  const {isError,error,isLoading} = useGetStudentsQuery()
  return (
    <div>
      { isLoading && <p>數據加載中...</p> }
      {isError && error.data}
    </div>
  )
}

export default App

React--》Redux Toolkit的使用講解

如果接收的接口數據有很多,但自己只是想要其中的一小部分,可以通過以下方式解決:

React--》Redux Toolkit的使用講解

useQuery參數

RTKQ給我們提供對接收到的數據進行自定義設置,如下:

import { useGetStudentsQuery } from './store/word'

const App = () => {
  // 調用Api查詢數據,這個鉤子函數它會返回一個對象作為返回值,請求過程中相關數據都在該對象中
  const result = useGetStudentsQuery(null,{
    // useQuery可以接收一個對象作為第二個參數,通過該對象可以對請求進行配置
    selectFromResult:result => { // 用來指定useQuery返回的結果
      if(result.data === undefined){
        result.data = '值被我修改了'
      }
      return result
    },
    pollingInterval:0, // 設置輪詢的間隔(隔一段時間發(fā)起一次請求),單位毫秒,如果為0則不輪詢
    skip:false, // 設置是否跳過當前請求,默認為false
    refetchOnMountOrArgChange:false, // 設置是否每次都重新加載數據,false正常使用緩存;true每次都重載數據;數字,數據緩存的時間(秒)
  })
  console.log(result)
  const {isError,error,isLoading} = result
  return (
    <div>
      { isLoading && <p>數據加載中...</p> }
      {isError && error.data}
    </div>
  )
}

React--》Redux Toolkit的使用講解

還有兩個參數設置需要在store進行數據監(jiān)聽才能使用,如下:

React--》Redux Toolkit的使用講解

React--》Redux Toolkit的使用講解文章來源地址http://www.zghlxwxcb.cn/news/detail-428963.html

到了這里,關于React--》Redux Toolkit的使用講解的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

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

領支付寶紅包贊助服務器費用

相關文章

  • React中使用Redux (一) - 在React中直接使用Redux

    React中使用Redux (一) - 在React中直接使用Redux

    開始之前需要強調一下,redux和react沒有直接的關系,你完全可以在React, Angular, Ember, jQuery, or vanilla JavaScript中使用Redux 。 盡管這樣說,redux依然是和React庫結合的更好,因為他們是通過state函數來描述界面的狀態(tài),Redux可以發(fā)射狀態(tài)的更新, 讓他們作出相應; 目前redux在react中使

    2024年01月23日
    瀏覽(32)
  • React中使用Redux (二) - 通過react-redux庫連接React和Redux

    react-redux庫使用Redux 上一篇文章演示React中直接使用Redux的使用過程是十分繁瑣的, 并且有許多重復代碼 但是實際上redux官方幫助我們提供了 react-redux 的庫,這個庫是幫助我們完成連接redux和react的輔助工具, 可以直接在項目中使用,并且實現的邏輯會更加的嚴謹和高效 這篇我們

    2024年02月20日
    瀏覽(30)
  • 在react中使用redux && react-redux的使用demo

    前言: redux是一種狀態(tài)管理工具,可以存儲和操作一些全局或者很多組件需要使用的公共數據。 平心而論,redux的使用對于新上手來說不太友好,多個依賴包的,多種api的結合使用,相對來說比做同樣一件事的vuex用起來比較麻煩.不過,熟能生巧,用多了也就習慣了,下面是個人的一個d

    2024年02月06日
    瀏覽(32)
  • 什么是redux?如何在react 項目中使用redux?

    redux是一種用于管理JavaScript應用程序的狀態(tài)管理庫。它可以與React、Augular、Vue等前端框架結合使用,但也可以純在JavaScript應用程序中獨立使用。redux遵循單項數據流的原則,通過一個全局的狀態(tài)樹來管理應用程序的狀態(tài),從而使狀態(tài)的變化更加可預測和已于維護。 redux的核心

    2024年02月15日
    瀏覽(25)
  • React中使用Redux

    React中使用Redux

    ? ? ? ? redux是一個專門用于狀態(tài)管理的一個庫,和vue中的vuex功能類似。其中核心點就是狀態(tài)的管理。雖然我們無論在vue還是在react中我們組件間的通行都可以使用消息總線或者父子組件間的消息傳遞來進行操作。但是如果我們需要A組件的狀態(tài)在其他十個或者二十個組件上進

    2024年02月16日
    瀏覽(25)
  • 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狀態(tài)的方式。舉個例子,假設我們現在的

    2024年04月08日
    瀏覽(32)
  • Redux工具包(二) - Redux Toolkit的異步操作(發(fā)送網絡請求)

    Redux Toolkit異步操作 在之前的開發(fā)中,我們通過redux-thunk中間件讓dispatch中可以進行異步操作, 其實Redux Toolkit工具包默認已經給我們集成了Thunk相關的功能, 我們可以通過 createAsyncThunk 函數創(chuàng)建一個異步的action createAsyncThunk函數有參數: 參數一: 傳入事件類型type 參數二: 傳入一個

    2024年02月01日
    瀏覽(50)
  • 【React】Redux的使用詳解

    【React】Redux的使用詳解

    ? 單一數據源 ? ? 整個應用程序的state被存儲在一顆object tree中,并且這個object tree只存儲在一個 store 中: ? ? Redux并沒有強制讓我們不能創(chuàng)建多個Store,但是那樣做并不利于數據的維護; ? ? 單一的數據源可以讓整個應用程序的state變得方便維護、追蹤、修改; ? St

    2024年01月18日
    瀏覽(25)
  • Redux - Redux在React函數式組件中的基本使用

    Redux - Redux在React函數式組件中的基本使用

    Redux 是 JavaScript 應用的狀態(tài)容器,提供可預測的狀態(tài)管理。 它主要的幾個方法如下: 重要的有方法 有 dispatch(分發(fā)action) 、 getState(獲取state) 、 subscribe(監(jiān)聽state的變化) ,下面會介紹到,另外兩個可以不用管; 那什么時候使用Redux呢? 當遇到如下問題時,建議開始使

    2024年02月13日
    瀏覽(31)
  • React - redux 使用(由淺入深)

    React - redux 使用(由淺入深)

    中文文檔: http://www.redux.org.cn/ 英文文檔: https://redux.js.org/ Github: https://github.com/reactjs/redux 可直接參照 目錄十 進行使用 react-redux redux 是一個專門用于做狀態(tài)管理的JS庫(不是react插件庫)。 它可以用在 react, angular, vue 等項目中, 但基本與 react 配合使用。 作用: 集中式管理 re

    2024年02月07日
    瀏覽(24)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包