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

Redux工具包(二) - Redux Toolkit的異步操作(發(fā)送網(wǎng)絡(luò)請求)

這篇具有很好參考價值的文章主要介紹了Redux工具包(二) - Redux Toolkit的異步操作(發(fā)送網(wǎng)絡(luò)請求)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

Redux Toolkit異步操作

在之前的開發(fā)中,我們通過redux-thunk中間件讓dispatch中可以進(jìn)行異步操作, 其實Redux Toolkit工具包默認(rèn)已經(jīng)給我們集成了Thunk相關(guān)的功能, 我們可以通過createAsyncThunk函數(shù)創(chuàng)建一個異步的action

createAsyncThunk函數(shù)有參數(shù):

參數(shù)一: 傳入事件類型type

參數(shù)二: 傳入一個函數(shù), 該函數(shù)可以執(zhí)行異步操作, 甚至可以直接傳入一個異步函數(shù)

export const fetchHomeMultidataAction = createAsyncThunk("fetch/homemultidata", async () => {
  const res = await axios.get("http://123.207.32.32:8000/home/multidata")
  const banners = res.data.data.banners.list
  const recommends = res.data.data.recommends.list
})f

當(dāng)createAsyncThunk創(chuàng)建出來的action被dispatch時,會存在三種狀態(tài):

pending: action被發(fā)出,但是還沒有最終的結(jié)果;

fulfilled: 獲取到最終的結(jié)果(有返回值的結(jié)果);

rejected: 執(zhí)行過程中有錯誤或者拋出了異常;

我們可以在createSlice的entraReducer中監(jiān)聽這些結(jié)果:

注意: 我們創(chuàng)建的一部action: fetchHomeMultidataAction返回的結(jié)果, 會被傳到下面監(jiān)聽函數(shù)的actions參數(shù)中,

通過actions.payload獲取(也可以對actions進(jìn)行結(jié)構(gòu), 直接獲取payload)

// extraReducers中針對異步action, 監(jiān)聽它的狀態(tài)
extraReducers: {
  // 處于padding狀態(tài)時回調(diào)
  [fetchHomeMultidataAction.pending](state, actions) {
    console.log("正處于pending狀態(tài)")
  },
  // 處于fulfilled狀態(tài)時回調(diào)
  [fetchHomeMultidataAction.fulfilled](state, actions) {
    console.log("正處于fulfilled狀態(tài)")
  },
  // 處于rejected狀態(tài)時回調(diào)
  [fetchHomeMultidataAction.rejected](state, actions) {
    console.log("正處于rejected狀態(tài)")
  }
}

演示網(wǎng)絡(luò)請求的流程:

方式一:

在home.js中, 通過createAsyncThunk函數(shù)創(chuàng)建一個異步的action

再在extraReducers中監(jiān)聽這個異步的action的狀態(tài), 當(dāng)他處于fulfilled狀態(tài)時, 獲取到網(wǎng)絡(luò)請求的數(shù)據(jù), 并修改原來state中的數(shù)據(jù)

import { createSlice, createAsyncThunk } from "@reduxjs/toolkit"
import axios from "axios"

// 創(chuàng)建一個異步的action
export const fetchHomeMultidataAction = createAsyncThunk("fetch/homemultidata", async () => {
  const res = await axios.get("http://123.207.32.32:8000/home/multidata")
  // 返回結(jié)果會傳遞到監(jiān)聽函數(shù)的actions中
  return res.data
})

const homeSlice = createSlice({
  name: "home",
  initialState: {
    banners: [],
    recommends: []
  },
  // extraReducers中針對異步action, 監(jiān)聽它的狀態(tài)
  extraReducers: {
    [fetchHomeMultidataAction.fulfilled](state, { payload }) {
      // 在fulfilled狀態(tài)下, 將state中的banners和recommends修改為網(wǎng)絡(luò)請求后的數(shù)據(jù)
      state.banners = payload.data.banner.list
      state.recommends = payload.data.recommend.list
    }
  }
})

export default homeSlice.reducer

方式二:

如果我們不想通過在extraReducers在監(jiān)聽狀態(tài), 再修改state這種方法的話, 還有另外的一種做法

我們創(chuàng)建的fetchHomeMultidataAction這個異步action是接受兩個參數(shù)的

  • 參數(shù)一, extraInfo: 在派發(fā)這個異步action時, 如果有傳遞參數(shù), 會放在extraInfo里面
  • 參數(shù)二, store: 第二個參數(shù)將store傳遞過來

這樣我們獲取到結(jié)果后, 通過dispatch修改store中的state, 無需再監(jiān)聽異步action的狀態(tài)

import { createSlice, createAsyncThunk } from "@reduxjs/toolkit"
import axios from "axios"

// 創(chuàng)建一個異步的action
export const fetchHomeMultidataAction = createAsyncThunk(
  "fetch/homemultidata", 
  // 有傳遞過來兩個個參數(shù), 從store里面解構(gòu)拿到dispatch
  async (extraInfo, { dispatch }) => {
    // 1.發(fā)送網(wǎng)絡(luò)請求獲取數(shù)據(jù)
    const res = await axios.get("http://123.207.32.32:8000/home/multidata")
    // 2.從網(wǎng)絡(luò)請求結(jié)果中取出數(shù)據(jù)
    const banners = res.data.data.banner.list
    const recommends = res.data.data.recommend.list
		// 3.執(zhí)行dispatch, 派發(fā)action
    dispatch(changeBanners(banners))
    dispatch(changeRecommends(recommends))
  }
)

const homeSlice = createSlice({
  name: "home",
  initialState: {
    banners: [],
    recommends: []
  },
  reducers: {
    changeBanners(state, { payload }) {
      state.banners = payload
    },
    changeRecommends(state, { payload }) {
      state.recommends = payload
    }
  }
})

export const { changeBanners, changeRecommends } = homeSlice.actions

export default homeSlice.reducer

不管是哪種方式, 都需要在頁面的componentDidMount生命周期中, 通過派發(fā)異步的action發(fā)送網(wǎng)絡(luò)請求文章來源地址http://www.zghlxwxcb.cn/news/detail-791076.html

import React, { PureComponent } from 'react'
import { connect } from 'react-redux'
import { fetchHomeMultidataAction } from '../store/features/home'

export class About extends PureComponent {
  // 生命周期中, 調(diào)用映射的方法派發(fā)異步的action
  componentDidMount() {
    this.props.fetchHomeMultidata()
  }

  render() {
    const { banners, recommends } = this.props

    return (
      <div>
        <h2>About</h2>
        <h2>輪播圖數(shù)據(jù)</h2>
        <ul>
          {
            banners.map(item => {
              return <li key={item.acm}>{item.title}</li>
            })
          }
        </ul>
        <h2>推薦數(shù)據(jù)</h2>
        <ul>
          {
            recommends.map(item => {
              return <li key={item.acm}>{item.title}</li>
            })
          }
        </ul>
      </div>
    )
  }
}

const mapStateToProps = (state) => ({
  banners: state.home.banners,
  recommends: state.home.recommends
})
// 派發(fā)異步的action
const mapDispatchToProps = (dispatch) => ({
  fetchHomeMultidata() {
    dispatch(fetchHomeMultidataAction())
  }
})

export default connect(mapStateToProps, mapDispatchToProps)(About)

到了這里,關(guān)于Redux工具包(二) - Redux Toolkit的異步操作(發(fā)送網(wǎng)絡(luò)請求)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • GIS工具包

    GIS工具包,根據(jù)jts工具,結(jié)合實際使用場景提取出來的常用工具集合;涵蓋幾何格式轉(zhuǎn)換(WKT,GeoJSON等)與geometry轉(zhuǎn)換、gis距離計算、度距離單位換算、角度計算、buffer運(yùn)算、映射截取、幾何穿串等操作 gis-tools源碼庫地址 1.1 WktTool使用說明 wkt格式與geometry互轉(zhuǎn); wkt轉(zhuǎn)geometry操作

    2024年02月06日
    瀏覽(123)
  • 學(xué)習(xí)筆記-JVM-工具包(JVM分析工具)

    學(xué)習(xí)筆記-JVM-工具包(JVM分析工具)

    常用工具 JDK工具 ① jps: JVM Process status tool:JVM進(jìn)程狀態(tài)工具,查看進(jìn)程基本信息 ② jstat: JVM statistics monitoring tool : JVM統(tǒng)計監(jiān)控工具,查看堆,GC詳細(xì)信息 ③ jinfo:Java Configuration Info :查看配置參數(shù)信息,支持部分參數(shù)運(yùn)行時修改 ④ jmap:Java Memory Map :分析堆內(nèi)存工具,du

    2024年02月13日
    瀏覽(27)
  • MATLAB添加工具包(詳細(xì))

    MATLAB添加工具包(詳細(xì))

    我這里要添加的文件包為:DeepLearnToolbox-master 我這里的安裝目錄是:D:softwareMATLABtoolbox (1)以中文版為例,在主界面找到“設(shè)置路徑”按鈕 (2)點(diǎn)擊“設(shè)置路徑”,彈出設(shè)置界面 第一步:點(diǎn)“添加文件夾” (注:如果要工具包中有多個子文件夾,則點(diǎn)“添加并包含子文

    2024年02月02日
    瀏覽(21)
  • 【Linux】基本開發(fā)工具包使用

    【Linux】基本開發(fā)工具包使用

    目錄 一, yum ——linux軟件包管理器 ?1. 軟件包是啥子? ?2.? yum基本使用? 1. 步驟:? 2. 開發(fā)工具推薦(centos 7.6) 二,vim —— linux文本編輯器 1. Normal mode? ——? 命令模式(記不住沒關(guān)系,多練就行) 2.? last line? mode——? ?末行模式 (如何進(jìn)入;shift :) 3.?Insert mode ——插

    2024年02月08日
    瀏覽(29)
  • Hardhat工具包1--安裝使用

    Hardhat工具包1--安裝使用

    參考資料: 官方文檔 : https://hardhat.org/getting-started/ https://hardhat.org/hardhat-runner/docs/getting-started#overview 基于Hardhat和Openzeppelin開發(fā)可升級合約(一) 基于Hardhat和Openzeppelin開發(fā)可升級合約(一)_灬倪先森_的博客-CSDN博客 ---------------------------------------------------------------------------------

    2023年04月11日
    瀏覽(25)
  • Windows11滲透工具包分享

    Windows11滲透工具包分享

    ? ? ? ? ? 項目地址 下載地址

    2024年02月13日
    瀏覽(20)
  • Quanto: PyTorch 量化工具包

    量化技術(shù)通過用低精度數(shù)據(jù)類型 (如 8 位整型 (int8)) 來表示深度學(xué)習(xí)模型的權(quán)重和激活,以減少傳統(tǒng)深度學(xué)習(xí)模型使用 32 位浮點(diǎn) (float32) 表示權(quán)重和激活所帶來的計算和內(nèi)存開銷。 減少位寬意味著模型的內(nèi)存占用更低,這對在消費(fèi)設(shè)備上部署大語言模型至關(guān)重要。量化技術(shù)也

    2024年04月10日
    瀏覽(31)
  • Kubernetes GoRoutineMap工具包代碼詳解

    GoRoutineMap 定義了一種類型,可以運(yùn)行具有名稱的 goroutine 并跟蹤它們的狀態(tài)。它防止創(chuàng)建具有相同名稱的多個goroutine,并且在上一個具有該名稱的 goroutine 完成后的一段退避時間內(nèi)可能阻止重新創(chuàng)建 goroutine。 使用GoRoutineMap場景: 使用協(xié)程的方式運(yùn)行函數(shù)邏輯,如果函數(shù)成功

    2024年02月06日
    瀏覽(21)
  • 淺談WPF之MVVM工具包

    淺談WPF之MVVM工具包

    在之前的WPF示例中,都會用到一個MVVM框,也是一個比較常的MVVM框架,就是MVVM工具包【CommunityToolkit.Mvvm】,今天專門以一個簡單的小例子,簡述一下MVVM工具包的常見用法,僅供學(xué)習(xí)分享使用,如有不足之處,還請指正。 ? ? CommunityToolkit.Mvvm 包(又名 MVVM 工具包)是一個現(xiàn)代

    2024年03月25日
    瀏覽(24)
  • 實踐學(xué)習(xí)PaddleScience飛槳科學(xué)工具包

    實踐學(xué)習(xí)PaddleScience飛槳科學(xué)工具包

    動手實踐,在實踐中學(xué)習(xí)!本項目可以在AIStudio平臺一鍵運(yùn)行!地址:https://aistudio.baidu.com/projectdetail/4278591 本項目第一次執(zhí)行會報錯,再執(zhí)行一次即可。若碰到莫名其妙的報錯,換成32G顯存環(huán)境試試。 愛因斯坦和牛頓也是普通人,也有認(rèn)識不到的地方,不要盲目崇拜,也不要

    2024年01月16日
    瀏覽(26)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包