欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文理解Redux及其工作原理

 更新時(shí)間:2022年09月12日 10:18:31   作者:小番茄夫斯基  
這篇文章主要介紹了一文理解R通過(guò)圍繞主題展開(kāi)詳細(xì)edux及其工作原理,文章通過(guò)主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下

一、是什么

React是用于構(gòu)建用戶界面的,幫助我們解決渲染DOM的過(guò)程

而在整個(gè)應(yīng)用中會(huì)存在很多個(gè)組件,每個(gè)組件的state是由自身進(jìn)行管理,包括組件定義自身的state、組件之間的通信通過(guò)props傳遞、使用Context實(shí)現(xiàn)數(shù)據(jù)共享

如果讓每個(gè)組件都存儲(chǔ)自身相關(guān)的狀態(tài),理論上來(lái)講不會(huì)影響應(yīng)用的運(yùn)行,但在開(kāi)發(fā)及后續(xù)維護(hù)階段,我們將花費(fèi)大量精力去查詢狀態(tài)的變化過(guò)程

這種情況下,如果將所有的狀態(tài)進(jìn)行集中管理,當(dāng)需要更新?tīng)顟B(tài)的時(shí)候,僅需要對(duì)這個(gè)管理集中處理,而不用去關(guān)心狀態(tài)是如何分發(fā)到每一個(gè)組件內(nèi)部的

redux就是一個(gè)實(shí)現(xiàn)上述集中管理的容器,遵循三大基本原則:

  • 單一數(shù)據(jù)源
  • state 是只讀的
  • 使用純函數(shù)來(lái)執(zhí)行修改

注意的是,redux并不是只應(yīng)用在react中,還與其他界面庫(kù)一起使用,如Vue

二、工作原理

redux要求我們把數(shù)據(jù)都放在 store公共存儲(chǔ)空間

一個(gè)組件改變了 store 里的數(shù)據(jù)內(nèi)容,其他組件就能感知到 store的變化,再來(lái)取數(shù)據(jù),從而間接的實(shí)現(xiàn)了這些數(shù)據(jù)傳遞的功能

工作流程圖如下所示:

根據(jù)流程圖,可以想象,React Components 是借書(shū)的用戶, Action Creactor 是借書(shū)時(shí)說(shuō)的話(借什么書(shū)), Store 是圖書(shū)館管理員,Reducer 是記錄本(借什么書(shū),還什么書(shū),在哪兒,需要查一下), state 是書(shū)籍信息

整個(gè)流程就是借書(shū)的用戶需要先存在,然后需要借書(shū),需要一句話來(lái)描述借什么書(shū),圖書(shū)館管理員聽(tīng)到后需要查一下記錄本,了解圖書(shū)的位置,最后圖書(shū)館管理員會(huì)把這本書(shū)給到這個(gè)借書(shū)人

轉(zhuǎn)換為代碼是,React Components 需要獲取一些數(shù)據(jù), 然后它就告知 Store 需要獲取數(shù)據(jù),這就是就是 Action Creactor , Store 接收到之后去 Reducer 查一下, Reducer 會(huì)告訴 Store 應(yīng)該給這個(gè)組件什么數(shù)據(jù)

三、如何使用

創(chuàng)建一個(gè)store的公共數(shù)據(jù)區(qū)域

import { createStore } from 'redux' // 引入一個(gè)第三方的方法
const store = createStore() // 創(chuàng)建數(shù)據(jù)的公共存儲(chǔ)區(qū)域(管理員)

還需要?jiǎng)?chuàng)建一個(gè)記錄本去輔助管理數(shù)據(jù),也就是reduecer,本質(zhì)就是一個(gè)函數(shù),接收兩個(gè)參數(shù)stateaction,返回state

// 設(shè)置默認(rèn)值
const initialState = {
  counter: 0
}

const reducer = (state = initialState, action) => {
}

然后就可以將記錄本傳遞給store,兩者建立連接。

如下:

const store = createStore(reducer)

如果想要獲取store里面的數(shù)據(jù),則通過(guò)store.getState()來(lái)獲取當(dāng)前state

console.log(store.getState());

下面再看看如何更改store里面數(shù)據(jù),是通過(guò)dispatch來(lái)派發(fā)action,通常action中都會(huì)有type屬性,也可以攜帶其他的數(shù)據(jù)

store.dispatch({
  type: "INCREMENT"
})

store.dispath({
  type: "DECREMENT"
})

store.dispatch({
  type: "ADD_NUMBER",
  number: 5
})

下面再來(lái)看看修改reducer中的處理邏輯:

const reducer = (state = initialState, action) => {
  switch (action.type) {
    case "INCREMENT":
      return {...state, counter: state.counter + 1};
    case "DECREMENT":
      return {...state, counter: state.counter - 1};
    case "ADD_NUMBER":
      return {...state, counter: state.counter + action.number}
    default: 
      return state;
  }
}

注意,reducer是一個(gè)純函數(shù),不需要直接修改state

這樣派發(fā)action之后,既可以通過(guò)store.subscribe監(jiān)聽(tīng)store的變化,如下:

store.subscribe(() => {
  console.log(store.getState());
})

React項(xiàng)目中,會(huì)搭配react-redux進(jìn)行使用

完整代碼如下:

const redux = require('redux');

const initialState = {
  counter: 0
}

// 創(chuàng)建reducer
const reducer = (state = initialState, action) => {
  switch (action.type) {
    case "INCREMENT":
      return {...state, counter: state.counter + 1};
    case "DECREMENT":
      return {...state, counter: state.counter - 1};
    case "ADD_NUMBER":
      return {...state, counter: state.counter + action.number}
    default: 
      return state;
  }
}

// 根據(jù)reducer創(chuàng)建store
const store = redux.createStore(reducer);

store.subscribe(() => {
  console.log(store.getState());
})

// 修改store中的state
store.dispatch({
  type: "INCREMENT"
})
// console.log(store.getState());

store.dispatch({
  type: "DECREMENT"
})
// console.log(store.getState());

store.dispatch({
  type: "ADD_NUMBER",
  number: 5
})
// console.log(store.getState());

小結(jié)

  • createStore可以幫助創(chuàng)建 store
  • store.dispatch 幫助派發(fā) action , action 會(huì)傳遞給 store
  • store.getState 這個(gè)方法可以幫助獲取 store 里邊所有的數(shù)據(jù)內(nèi)容
  • store.subscrible 方法訂閱 store 的改變,只要 store 發(fā)生改變, store.subscrible 這個(gè)函數(shù)接收的這個(gè)回調(diào)函數(shù)就會(huì)被執(zhí)行

到此這篇關(guān)于一文理解Redux及其工作原理的文章就介紹到這了,更多相關(guān) Redux 工作原理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • React實(shí)踐之Tree組件的使用方法

    React實(shí)踐之Tree組件的使用方法

    本篇文章主要介紹了React實(shí)踐之Tree組件的使用方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • 基于react項(xiàng)目打包c(diǎn)ss引用路徑錯(cuò)誤解決方案

    基于react項(xiàng)目打包c(diǎn)ss引用路徑錯(cuò)誤解決方案

    這篇文章主要介紹了基于react項(xiàng)目打包c(diǎn)ss引用路徑錯(cuò)誤解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • React實(shí)現(xiàn)雙向綁定示例代碼

    React實(shí)現(xiàn)雙向綁定示例代碼

    這篇文章給大家介紹了在React中如何實(shí)現(xiàn)雙向綁定,文中給出了示例代碼,對(duì)大家的理解與學(xué)習(xí)很有幫助,有需要的朋友下面來(lái)一起看看吧。
    2016-09-09
  • React中的Refs屬性你來(lái)了解嗎

    React中的Refs屬性你來(lái)了解嗎

    這篇文章主要為大家詳細(xì)介紹了的React?Refs屬性,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • 詳解關(guān)于React-Router4.0跳轉(zhuǎn)不置頂解決方案

    詳解關(guān)于React-Router4.0跳轉(zhuǎn)不置頂解決方案

    這篇文章主要介紹了詳解關(guān)于React-Router4.0跳轉(zhuǎn)不置頂解決案,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-05-05
  • React使用useImperativeHandle自定義暴露給父組件的示例詳解

    React使用useImperativeHandle自定義暴露給父組件的示例詳解

    useImperativeHandle?是?React?提供的一個(gè)自定義?Hook,用于在函數(shù)組件中顯式地暴露給父組件特定實(shí)例的方法,本文將介紹?useImperativeHandle的基本用法、常見(jiàn)應(yīng)用場(chǎng)景,需要的可以參考下
    2024-03-03
  • React如何優(yōu)雅的捕獲異常

    React如何優(yōu)雅的捕獲異常

    捕獲異常是來(lái)定位你錯(cuò)誤代碼的。本文主要介紹了 React如何捕獲異常,你知道多少種方法,ErrorBoundary,ErrorBoundary-try-catch等等。本文就來(lái)詳細(xì)的介紹一下
    2021-06-06
  • React Native:react-native-code-push報(bào)錯(cuò)的解決

    React Native:react-native-code-push報(bào)錯(cuò)的解決

    這篇文章主要介紹了React Native:react-native-code-push報(bào)錯(cuò)的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • React-native橋接Android原生開(kāi)發(fā)詳解

    React-native橋接Android原生開(kāi)發(fā)詳解

    本篇文章主要介紹了React-native橋接Android原生開(kāi)發(fā)詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • React實(shí)現(xiàn)文件分片上傳和下載的方法詳解

    React實(shí)現(xiàn)文件分片上傳和下載的方法詳解

    在當(dāng)今的前端開(kāi)發(fā)中,處理文件流操作已經(jīng)成為一個(gè)常見(jiàn)的需求,無(wú)論是上傳、下載、讀取、展示還是其他的文件處理操作,都需要高效且可靠地處理二進(jìn)制數(shù)據(jù),本文將深入探討如何使用 React 實(shí)現(xiàn)文件分片上傳和下載,并介紹相關(guān)的基本概念和技術(shù),需要的朋友可以參考下
    2023-08-08

最新評(píng)論