最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React?Flux與Redux設(shè)計(jì)及使用原理

 更新時(shí)間:2023年03月16日 10:01:41   作者:糖^O^  
這篇文章主要介紹了React?Flux與Redux設(shè)計(jì)及使用,Redux最主要是用作應(yīng)用狀態(tài)的管理。簡(jiǎn)言之,Redux用一個(gè)單獨(dú)的常量狀態(tài)樹(shù)(state對(duì)象)保存這一整個(gè)應(yīng)用的狀態(tài),這個(gè)對(duì)象不能直接被改變

Flux 是一種架構(gòu)思想,專門解決軟件的結(jié)構(gòu)問(wèn)題。它跟MVC架構(gòu)是同一類東西,但是更加簡(jiǎn)單和清晰。Flux存在多種實(shí)現(xiàn)(至少15種)

Facebook Flux是用來(lái)構(gòu)建客戶端Web應(yīng)用的應(yīng)用架構(gòu)。它利用單向數(shù)據(jù)流的方式來(lái)組合React

中的視圖組件。它更像一個(gè)模式而不是一個(gè)正式的框架,開(kāi)發(fā)者不需要太多的新代碼就可以快速的上手Flux。

Facebook Flux是用來(lái)構(gòu)建客戶端Web應(yīng)用的應(yīng)用架構(gòu)。它利用單向數(shù)據(jù)流的方式來(lái)組合React

中的視圖組件。它更像一個(gè)模式而不是一個(gè)正式的框架,開(kāi)發(fā)者不需要太多的新代碼就可以快速的上手Flux。

Redux最主要是用作應(yīng)用狀態(tài)的管理。簡(jiǎn)言之,Redux用一個(gè)單獨(dú)的常量狀態(tài)樹(shù)(state對(duì)象)保存這一整個(gè)應(yīng)用的狀態(tài),這個(gè)對(duì)象不能直接被改變。當(dāng)一些數(shù)據(jù)變化了,一個(gè)新的對(duì)象就會(huì)被創(chuàng)建(使用actions和reducers),這樣就可以進(jìn)行數(shù)據(jù)追蹤,實(shí)現(xiàn)時(shí)光旅行。

1. redux介紹及設(shè)計(jì)和使用的三大原則

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

整個(gè)應(yīng)用的state被儲(chǔ)存在一棵object tree中,并且這個(gè)object tree只存在于唯一 一個(gè)store中

State是只讀的

唯一改變state的方法就是觸發(fā)action,action是一個(gè)用于描述已發(fā)生事件的普通對(duì)象.

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

描述action如何改變staet tree,需要編寫reducers.

2. redux工作流

Redux工作流程:

  • View在redux中會(huì)派發(fā)action方法 action通過(guò)store的dispatch方法會(huì)派發(fā)給store
  • store接收action,連同之前的state,一起傳遞給reducer reducer返回新的數(shù)據(jù)給store
  • store去改變自己的state

3. redux原理解析

store 是通過(guò) createStore創(chuàng)建出來(lái)的,
所以他的結(jié)構(gòu)
export const createStore =
function(reducer, initialState) {
return {
dispatch, 用于action的分發(fā),
改變store里面的state(currentState =
reducer(currentState,action)) ,并
在內(nèi)部遍歷subcribe注冊(cè)的監(jiān)聽(tīng)器
subscribe,注冊(cè)listener,
store里面state發(fā)生改變后,執(zhí)行該
listener
getState, 取store里面的
state
}
}
function createStore(reducer){
var list = [];
var state =reducer();
function subscribe(callback){
list.push(callback);
}
function dispatch(data){
state =
reducer(state,data);
for(var i in list){
list[i]();
}
}
function getState(){
return state;
}
return {
subscribe,
dispatch,
getState
}
}

4. reducer 擴(kuò)展

如果不同的action所處理的屬性之間沒(méi)有聯(lián)系,我們可以把 Reducer 函數(shù)拆分。

不同的函數(shù)負(fù)責(zé)處理不同屬性,最終把它們合并成一個(gè)大的 Reducer 即可

import {combineReducers} from "redux";
const reducer = combineReducers({
a: functionA,
b: functionB,
c: functionC
})
訪問(wèn):
(state)=>{
return {
kerwinstate:state.a (不同的命名空間)
}
}

5. redux中間件

在redux里,action僅僅是攜帶了數(shù)據(jù)的普通js對(duì)象,action creator返回的值是這個(gè)action類型的對(duì)象。

然后通過(guò)store.dispatch()進(jìn)行分發(fā)。同步的情況下一切都很完美,但reducer無(wú)法處理異步的情況,那么我們就需要在action和reducer中間架起一座橋梁來(lái)處理異步

i. 中間件的由來(lái)與原理、機(jī)制

export default function thunkMiddleware({ dispatch, getState }) {
return next => action =>
typeof action === 'function' ?
action(dispatch, getState) :
next(action);
}

這段代碼的意思是,中間件這個(gè)橋梁接受到的參數(shù)action,如果不是function則和過(guò)去一樣直接執(zhí)

行next方法(下一步處理),相當(dāng)于中間件沒(méi)有做任何事。如果action是function,則先執(zhí)行action,

action的處理結(jié)束之后,再在action的內(nèi)部調(diào)用dispatch。

ii. 常用異步中間件:

redux-thunk (store.dispatch參數(shù)可以是一個(gè)function)

import thunk from 'redux-thunk';
import {applyMiddleware} from "redux";
const store = createStore(fetchReducer, applyMiddleware(thunk));
const getComingSoon = ()=>{
//進(jìn)行異步請(qǐng)求
return (dispatch,store)=>{
}
}

redux-promise (store.dispatch參數(shù)可以是一個(gè)promise對(duì)象)

import promiseMiddleware from 'redux-promise';
const store = createStore(fetchReducer, applyMiddleware(thunk,promiseMiddleware));
const getComingSoon = ()=>{
//進(jìn)行異步請(qǐng)求
return axios.get(`****`).then(res=>{
return {
type:"cominglist",
info:res.data.data
}
})
}

6. Redux DevTools Extension

redux-devtools-extension 的使用

插件安裝

$ npm install redux-devtools-extension -D

下載完成之后

  • 可以在瀏覽器工具欄右上角可以看到圖標(biāo)(當(dāng)應(yīng)用可以使用該工具時(shí),圖標(biāo)變亮)
  • 在頁(yè)面上右鍵可以看到 Redux DevTools 選項(xiàng)
  • 打開(kāi)控制臺(tái),在菜單欄可以找到 Redux 菜單欄
import { createStore, compose} from 'redux'
import reducer from './reducer'
const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const store = createStore(reducer, /* preloadedState, */ composeEnhancers())
export default store

到此這篇關(guān)于React Flux與Redux設(shè)計(jì)及使用原理的文章就介紹到這了,更多相關(guān)React Flux與Redux內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • React中使用setInterval函數(shù)的實(shí)例

    React中使用setInterval函數(shù)的實(shí)例

    這篇文章主要介紹了React中使用setInterval函數(shù)的實(shí)例,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • React基于RBAC的權(quán)限控制案例講解

    React基于RBAC的權(quán)限控制案例講解

    這篇文章主要介紹了React基于RBAC的權(quán)限控制,通過(guò)定義角色和權(quán)限、編寫權(quán)限檢查函數(shù)以及在路由、組件和選擇控件中使用這些函數(shù),可以靈活地控制應(yīng)用中的訪問(wèn)權(quán)限,需要的朋友可以參考下
    2024-05-05
  • React key值的作用和使用詳解

    React key值的作用和使用詳解

    這篇文章主要介紹了React key值的作用和使用詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • React如何動(dòng)態(tài)控制偽元素樣式

    React如何動(dòng)態(tài)控制偽元素樣式

    這篇文章主要介紹了React如何動(dòng)態(tài)控制偽元素樣式問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Webpack 4.x搭建react開(kāi)發(fā)環(huán)境的方法步驟

    Webpack 4.x搭建react開(kāi)發(fā)環(huán)境的方法步驟

    這篇文章主要介紹了Webpack 4.x搭建react開(kāi)發(fā)環(huán)境的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • 關(guān)于hooks中useEffect()的使用總結(jié)

    關(guān)于hooks中useEffect()的使用總結(jié)

    這篇文章主要介紹了關(guān)于hooks中useEffect()的使用總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • React報(bào)錯(cuò)Type '() => JSX.Element[]' is not assignable to type FunctionComponent

    React報(bào)錯(cuò)Type '() => JSX.Element[]&apos

    這篇文章主要為大家介紹了React報(bào)錯(cuò)Type '() => JSX.Element[]' is not assignable to type FunctionComponent解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 基于React封裝一個(gè)層次模糊效果的容器組件

    基于React封裝一個(gè)層次模糊效果的容器組件

    這篇文章主要為大家詳細(xì)介紹了如何基于React封裝一個(gè)層次模糊效果的容器組件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • 基于Webpack4和React hooks搭建項(xiàng)目的方法

    基于Webpack4和React hooks搭建項(xiàng)目的方法

    這篇文章主要介紹了基于Webpack4和React hooks搭建項(xiàng)目的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • React項(xiàng)目中應(yīng)用TypeScript的實(shí)現(xiàn)

    React項(xiàng)目中應(yīng)用TypeScript的實(shí)現(xiàn)

    TypeScript通常都會(huì)依賴于框架,例如和vue、react 這些框架結(jié)合,本文就主要介紹了React項(xiàng)目中應(yīng)用TypeScript的實(shí)現(xiàn),分享給大家,具體如下:
    2021-09-09

最新評(píng)論

兴安县| 义乌市| 延津县| 平果县| 赤城县| 阳城县| 安多县| 苗栗市| 龙胜| 阜宁县| 河南省| 会同县| 南京市| 澎湖县| 盐源县| 长春市| 广饶县| 高平市| 铜鼓县| 饶河县| 黄梅县| 昌平区| 沭阳县| 韶山市| 营口市| 盐源县| 南投市| 嘉定区| 政和县| 乐清市| 佳木斯市| 科尔| 黑龙江省| 赤水市| 武邑县| 大埔县| 潜江市| 安陆市| 长白| 沙雅县| 海门市|