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

【React】Redux的使用詳解

這篇具有很好參考價(jià)值的文章主要介紹了【React】Redux的使用詳解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Redux的三大原則

? 單一數(shù)據(jù)源

? ? 整個(gè)應(yīng)用程序的state被存儲(chǔ)在一顆object tree中,并且這個(gè)object tree只存儲(chǔ)在一個(gè) store 中:

? ? Redux并沒有強(qiáng)制讓我們不能創(chuàng)建多個(gè)Store,但是那樣做并不利于數(shù)據(jù)的維護(hù);

? ? 單一的數(shù)據(jù)源可以讓整個(gè)應(yīng)用程序的state變得方便維護(hù)、追蹤、修改;

? State是只讀的

? ? 唯一修改State的方法一定是觸發(fā)action,不要試圖在其他地方通過任何的方式來修改State:

? ? 這樣就確保了View或網(wǎng)絡(luò)請(qǐng)求都不能直接修改state,它們只能通過action來描述自己想要如何修改state;

? ? 這樣可以保證所有的修改都被集中化處理,并且按照嚴(yán)格的順序來執(zhí)行,所以不需要擔(dān)心race condition(竟態(tài))的問題;

? 使用純函數(shù)來執(zhí)行修改

? ? 通過reducer將 舊state和 actions聯(lián)系在一起,并且返回一個(gè)新的State:

? ? 隨著應(yīng)用程序的復(fù)雜度增加,我們可以將reducer拆分成多個(gè)小的reducers,分別操作不同state tree的一部分;

? ? 但是所有的reducer都應(yīng)該是純函數(shù),不能產(chǎn)生任何的副作用;

Redux官方圖

react-redux使用,react,react.js,前端,javascript

react-redux使用

? 安裝react-redux:

yarn add react-redux

? 1、創(chuàng)建store管理全局狀態(tài)

-src

—store

------- constants.js
先創(chuàng)建要使用的type常量

export const ADD_NUMBER = "add_number"
export const SUB_NUMBER = "sub_number"

export const CHANGE_BANNERS = "change_banners"
export const CHANGE_RECOMMENDS = "change_recommends"

-src

—store

------- reducer.js

再創(chuàng)建reducer管理狀態(tài)

import * as actionTypes from "./constants"

const initialState = {
  counter: 100,
  
  banners: [],
  recommends: []
}

function reducer(state = initialState, action) {
  switch (action.type) {
    case actionTypes.ADD_NUMBER:
      return { ...state, counter: state.counter + action.num }
    case actionTypes.SUB_NUMBER:
      return { ...state, counter: state.counter - action.num }
    case actionTypes.CHANGE_BANNERS:
      return { ...state, banners: action.banners }
    case actionTypes.CHANGE_RECOMMENDS:
      return { ...state, recommends: action.recommends }
    default:
      return state
  }
}

export default reducer


-src

—store

------- index.js
在index導(dǎo)出整個(gè)store

import { createStore } from "redux"
import reducer from "./reducer"


const store = createStore(reducer)

export default store

-src

—store

------- actionCreators.js
創(chuàng)建actionCreators,放修改狀態(tài)的函數(shù)

import * as actionTypes from "./constants"
import axios from "axios"

export const addNumberAction = (num) => ({
  type: actionTypes.ADD_NUMBER,
  num
})

export const subNumberAction = (num) => ({
  type: actionTypes.SUB_NUMBER,
  num
})


export const changeBannersAction = (banners) => ({
  type: actionTypes.CHANGE_BANNERS,
  banners
})

export const changeRecommendsAction = (recommends) => ({
  type: actionTypes.CHANGE_RECOMMENDS,
  recommends
})



export const fetchHomeMultidataAction = () => {
  // 如果是一個(gè)普通的action, 那么我們這里需要返回action對(duì)象
  // 問題: 對(duì)象中是不能直接拿到從服務(wù)器請(qǐng)求的異步數(shù)據(jù)的
  // return {}

  return function(dispatch, getState) {
    // 異步操作: 網(wǎng)絡(luò)請(qǐng)求
    // console.log("foo function execution-----", getState().counter)
    axios.get("http://123.207.32.32:8000/home/multidata").then(res => {
      const banners = res.data.data.banner.list
      const recommends = res.data.data.recommend.list

      // dispatch({ type: actionTypes.CHANGE_BANNERS, banners })
      // dispatch({ type: actionTypes.CHANGE_RECOMMENDS, recommends })
      dispatch(changeBannersAction(banners))
      dispatch(changeRecommendsAction(recommends))
    })
  }

  // 如果返回的是一個(gè)函數(shù), 那么redux是不支持的
  // return foo
}


?? 2、在項(xiàng)目index.js根節(jié)點(diǎn)引用

-src

— index.js

react-redux使用,react,react.js,前端,javascript

? 3、 在需要使用redux的頁(yè)面或者組件中,通過connect高階組件映射到該組件的props中

? 解耦store和class組件的耦合

react-redux使用,react,react.js,前端,javascript

redux中異步操作

? redux也引入了中間件(Middleware)的概念:

? ? 這個(gè)中間件的目的是在dispatch的action和最終達(dá)到的reducer之間,擴(kuò)展一些自己的代碼;

? ? 比如日志記錄、調(diào)用異步接口、添加代碼調(diào)試功能等等;

? 我們現(xiàn)在要做的事情就是發(fā)送異步的網(wǎng)絡(luò)請(qǐng)求,所以我們可以添加對(duì)應(yīng)的中間件:

? ? 這里官網(wǎng)推薦的、包括演示的網(wǎng)絡(luò)請(qǐng)求的中間件是使用 redux-thunk

? redux-thunk是如何做到讓我們可以發(fā)送異步的請(qǐng)求呢?

? ? 我們知道,默認(rèn)情況下的dispatch(action),action需要是一個(gè)JavaScript的對(duì)象;

? ? redux-thunk可以讓dispatch(action函數(shù)),action可以是一個(gè)函數(shù);

? ? 該函數(shù)會(huì)被調(diào)用,并且會(huì)傳給這個(gè)函數(shù)一個(gè)dispatch函數(shù)和getState函數(shù);

? ? dispatch函數(shù)用于我們之后再次派發(fā)action;

? ? getState函數(shù)考慮到我們之后的一些操作需要依賴原來的狀態(tài),用于讓我們可以獲取之前的一些狀態(tài);

如何使用redux-thunk

? 1.安裝redux-thunk

如何使用redux-thunk

yarn add redux-thunk

? 2.在創(chuàng)建store時(shí)傳入應(yīng)用了middleware的enhance函數(shù)

? ? 通過applyMiddleware來結(jié)合多個(gè)Middleware, 返回一個(gè)enhancer;

? ? 將enhancer作為第二個(gè)參數(shù)傳入到createStore中;

// 通過applyMiddleware來結(jié)合多個(gè)Middleware, 返回一個(gè)enhancer
const enhancer = applyMiddleware(thunkMiddleware);
// 將enhancer作為第二個(gè)參數(shù)傳入到createStore中
const store = createStore(reducer, enhancer);

? 3.定義返回一個(gè)函數(shù)的action:

? ? 注意:這里不是返回一個(gè)對(duì)象了,而是一個(gè)函數(shù);

? ? 該函數(shù)在dispatch之后會(huì)被執(zhí)行;

const getHomeMultidataAction = () => {
  return (dispatch) => {
    axios.get("http://123.207.32.32:8000/home/multidata").then(res => {
      const data = res.data.data;
      dispatch(changeBannersAction(data.banner.list));
      dispatch(changeRecommendsAction(data.recommend.list));
    })
  }
}

combineReducers函數(shù)

? 事實(shí)上,redux給我們提供了一個(gè)combineReducers函數(shù)可以方便的讓我們對(duì)多個(gè)reducer進(jìn)行合并:

? 那么combineReducers是如何實(shí)現(xiàn)的呢?

? ? 事實(shí)上,它也是將我們傳入的reducers合并到一個(gè)對(duì)象中,最終返回一個(gè)combination的函數(shù)(相當(dāng)于我們之前的reducer函

數(shù)了);

? ? 在執(zhí)行combination函數(shù)的過程中,它會(huì)通過判斷前后返回的數(shù)據(jù)是否相同來決定返回之前的state還是新的state;

? ? 新的state會(huì)觸發(fā)訂閱者發(fā)生對(duì)應(yīng)的刷新,而舊的state可以有效的組織訂閱者發(fā)生刷新;文章來源地址http://www.zghlxwxcb.cn/news/detail-802325.html

到了這里,關(guān)于【React】Redux的使用詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • react之react-redux的介紹、基本使用、獲取狀態(tài)、分發(fā)動(dòng)作、數(shù)據(jù)流、reducer的分離與合并等

    react之react-redux的介紹、基本使用、獲取狀態(tài)、分發(fā)動(dòng)作、數(shù)據(jù)流、reducer的分離與合并等

    官網(wǎng)地址 React 和 Redux 是兩個(gè)獨(dú)立的庫(kù),兩者之間職責(zé)獨(dú)立。因此,為了實(shí)現(xiàn)在 React 中使用 Redux 進(jìn)行狀態(tài)管理 ,就需要一種機(jī)制,將這兩個(gè)獨(dú)立的庫(kù)關(guān)聯(lián)在一起。這時(shí)候就用到 React-Redux 這個(gè)綁定庫(kù)了 作用:為 React 接入 Redux,實(shí)現(xiàn)在 React 中使用 Redux 進(jìn)行狀態(tài)管理。 react-r

    2024年02月11日
    瀏覽(31)
  • 【前端知識(shí)】React 基礎(chǔ)鞏固(三十三)——Redux的使用詳解

    【前端知識(shí)】React 基礎(chǔ)鞏固(三十三)——Redux的使用詳解

    針對(duì) React 基礎(chǔ)鞏固(三十二) 中的案例,我們希望抽取頁(yè)面中共有的代碼(例如下方的代碼),使用高階組件統(tǒng)一攔截。 為了讓react和redux產(chǎn)生聯(lián)系,安裝一款工具 react-redux 使用 react-redux ,在index.js中統(tǒng)一注入store 新建about.js頁(yè)面,通過 react-redux 引入store 在App.jsx中引入新的

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

    【React】Redux的使用詳解

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

    2024年01月18日
    瀏覽(24)
  • React - Redux Hooks的使用細(xì)節(jié)詳解

    Redux中Hooks介紹 在之前的redux開發(fā)中,為了讓組件和redux結(jié)合起來,我們使用了react-redux庫(kù)中的connect : 但是這種方式必須使用高階函數(shù)結(jié)合返回的高階組件; 并且必須編寫:mapStateToProps和 mapDispatchToProps映射的函數(shù), 具體使用方式在前面文章有講解; 在Redux7.1開始,提供了Hook的方式

    2024年02月02日
    瀏覽(15)
  • 【前端知識(shí)】React 基礎(chǔ)鞏固(三十二)——Redux的三大原則、使用流程及實(shí)踐

    【前端知識(shí)】React 基礎(chǔ)鞏固(三十二)——Redux的三大原則、使用流程及實(shí)踐

    單一數(shù)據(jù)源 整個(gè)應(yīng)用程序的state被存儲(chǔ)在一顆object tree 中,并且這個(gè)object tree 只存儲(chǔ)在一個(gè)store中; Redux并沒有強(qiáng)制讓我們不能創(chuàng)建多個(gè)Store,但是那樣做不利于數(shù)據(jù)維護(hù); 單一的數(shù)據(jù)源可以讓整個(gè)應(yīng)用程序的state變得方便維護(hù)、追蹤、修改; State是只讀的 唯一修改State的方法

    2024年02月15日
    瀏覽(31)
  • 【前端】React快速入門+Redux狀態(tài)管理

    【前端】React快速入門+Redux狀態(tài)管理

    本文旨在記錄react的基礎(chǔ)內(nèi)容,幫助有需要的同學(xué)快速上手,需要進(jìn)一步了解描述更加穩(wěn)妥和全面的信息,請(qǐng)查閱官方文檔 官方文檔點(diǎn)擊這里進(jìn)行跳轉(zhuǎn) react框架 vue,react,angular這幾種主流前端框架使用頻率較高…本質(zhì)還是js庫(kù)。 React.js是一個(gè)用于構(gòu)建用戶界面的JavaScript庫(kù)。它由

    2024年02月12日
    瀏覽(60)
  • React中使用Redux (一) - 在React中直接使用Redux

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

    開始之前需要強(qiáng)調(diào)一下,redux和react沒有直接的關(guān)系,你完全可以在React, Angular, Ember, jQuery, or vanilla JavaScript中使用Redux 。 盡管這樣說,redux依然是和React庫(kù)結(jié)合的更好,因?yàn)樗麄兪峭ㄟ^state函數(shù)來描述界面的狀態(tài),Redux可以發(fā)射狀態(tài)的更新, 讓他們作出相應(yīng); 目前redux在react中使

    2024年01月23日
    瀏覽(32)
  • 【前端知識(shí)】React 基礎(chǔ)鞏固(三十一)——Redux的簡(jiǎn)介

    概念 純函數(shù)(確定的輸入一定產(chǎn)生確定的輸出,函數(shù)在執(zhí)行過程中不產(chǎn)生副作用): 在程序設(shè)計(jì)中,若一個(gè)函數(shù)符合以下條件,那么這個(gè)函數(shù)就被稱為純函數(shù) 此函數(shù)在相同的輸入值時(shí),需產(chǎn)生相同的輸出 函數(shù)的輸出和輸入值以外的其他隱藏信息或狀態(tài)無關(guān),也和由I/O設(shè)備產(chǎn)

    2024年02月16日
    瀏覽(24)
  • React中的redux-saga詳解

    React中的redux-saga詳解

    redux-saga 是 redux 一個(gè)中間件,它是基于ES6 的 Generator 功能實(shí)現(xiàn),用于解決異步問題(讓redux中可以直接進(jìn)行異步操作)。 組件會(huì)發(fā)送一個(gè) action 對(duì)象給 redux-saga,redux-saga(主saga) 就會(huì)分析監(jiān)聽 saga 中有沒有當(dāng)前 action 對(duì)應(yīng)的 type 類型操作,如果在監(jiān)聽 saga 中找到了,說明當(dāng)前

    2024年02月04日
    瀏覽(25)
  • 什么是redux?如何在react 項(xiàng)目中使用redux?

    redux是一種用于管理JavaScript應(yīng)用程序的狀態(tài)管理庫(kù)。它可以與React、Augular、Vue等前端框架結(jié)合使用,但也可以純?cè)贘avaScript應(yīng)用程序中獨(dú)立使用。redux遵循單項(xiàng)數(shù)據(jù)流的原則,通過一個(gè)全局的狀態(tài)樹來管理應(yīng)用程序的狀態(tài),從而使?fàn)顟B(tài)的變化更加可預(yù)測(cè)和已于維護(hù)。 redux的核心

    2024年02月15日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包