摘要:概述這一章講多個(gè)怎么處理,并將搞成支持支持多個(gè)拆封查看瀏覽器就是這么簡單了,核心函數(shù)是,將多個(gè)并成一個(gè),拆分之后呢,每個(gè)多帶帶管理一個(gè)改造使之支持添加并修改計(jì)算邏輯可能是一個(gè)經(jīng)過的對(duì)象所以需要判斷是否是一個(gè)對(duì)象如果是那說明這是一個(gè)復(fù)合的需要循
0x001 概述
這一章講多個(gè)reducer怎么處理,并將ledux搞成支持支持多個(gè)reducer
0x002 拆封reducerimport {createStore, combineReducers} from "redux" const ACTION_NUM1_INCREMENT = "ACTION_NUM1_INCREMENT" const ACTION_NUM2_INCREMENT = "ACTION_NUM2_INCREMENT" const num1 = (state = 0, action) => { switch (action.type) { case ACTION_NUM1_INCREMENT: { return ++state } default: { return state } } } const num2 = (state = 0, action) => { switch ((action.type)) { case ACTION_NUM2_INCREMENT: { return ++state } default: { return state } } } const reducer = combineReducers({ num1: num1, num2: num2 }) let store = createStore(reducer) store.subscribe(() => { console.log(store.getState()) }) store.dispatch({type: ACTION_NUM1_INCREMENT}) store.dispatch({type: ACTION_NUM2_INCREMENT})
查看瀏覽器
就是這么簡單了,核心函數(shù)是:combineReducers(reducers),將多個(gè)reducer并成一個(gè),拆分之后呢,每個(gè)reducer多帶帶管理一個(gè)state
0x002 改造ledux使之支持combineReducers添加combineReducers并修改state計(jì)算邏輯
class Ledux { static createStore(reduer) { return new Store(reduer) } static combineReducers(reducers) { return reducers } } class Store { constructor(reducer) { this.state = this.calculateState(reducer) this.callbacks = [] this.reducer = reducer } subscribe(callback) { this.callbacks.push(callback) } getState() { return this.state } dispatch(action) { this.state = this.calculateState(this.reducer, action) this.callbacks.forEach(callback => callback()) } /** * reducer 可能是一個(gè)經(jīng)過 combineReducers 的對(duì)象 * 所以需要判斷 reducer 是否是一個(gè)對(duì)象 * 如果是 * 那說明這是一個(gè)復(fù)合的 reducer * 需要循環(huán)計(jì)算出每個(gè) state * 并以對(duì)象的形式保存到 state * 如果不是對(duì)象并且是函數(shù) * 那說明這是一個(gè)單一的 reducer * 直接計(jì)算就行了 * 然后保存到 state * * @param reducer 單一的 reducer 函數(shù)或者 combineReducers 之后的對(duì)象 * @param action * @returns {*} */ calculateState(reducer, action = {}) { if (typeof reducer === "object") { return Object.keys(reducer).map((key) => { return { [key]: reducer[key](undefined, action) } }).reduce((pre, current) => { return {...pre, ...current} }) } else if (typeof reducer === "function") { return reducer(undefined, action) } } } /** * 添加幾個(gè)函數(shù)導(dǎo)出 * 保持和 redux 一致的 api * 這樣就可以不修改調(diào)用的函數(shù)了 */ const createStore = Ledux.createStore const combineReducers = Ledux.combineReducers export {createStore, combineReducers} export default Ledux
修改調(diào)用
// 直接修改 redux 引入就好了 import {createStore, combineReducers} from "./ledux"0x003 總結(jié)
無
0x004 資源源碼
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/97380.html
摘要:的全稱是統(tǒng)一資源定位符英文,可以這么說,是一種標(biāo)準(zhǔn),而網(wǎng)址則是符合標(biāo)準(zhǔn)的一種實(shí)現(xiàn)而已。渲染器,將組件渲染到頁面上。 0x000 概述 從這一章開始就進(jìn)入路由章節(jié)了,并不直接從如何使用react-route來講,而是從路由的概念和實(shí)現(xiàn)來講,達(dá)到知道路由的本質(zhì),而不是只知道如何使用react-route庫的目的,畢竟react-route只是一個(gè)庫,是路由的一個(gè)實(shí)現(xiàn)而已,而不是路由本身。 ...
摘要:函數(shù)的作用是,返回一個(gè)最終的函數(shù),做的事情是得到一個(gè)由多個(gè)不同函數(shù)作為可以自定義的對(duì)象。把數(shù)據(jù)放到一個(gè)對(duì)象列表中,每個(gè)數(shù)據(jù)用作為主鍵。不同類型的對(duì)象通過引用數(shù)據(jù),這樣數(shù)據(jù)發(fā)生改變的時(shí)候,只需要修改一處地方,減少數(shù)據(jù)冗余或者混用。 Redux初見 本文記錄的是自己對(duì)redux的學(xué)習(xí)和理解,希望可以簡潔易懂,入門redux,一步步的走進(jìn)redux! Redux是什么 Redux是Java...
摘要:更多相關(guān)介紹請(qǐng)看這特點(diǎn)僅僅只是虛擬最大限度減少與的交互類似于使用操作單向數(shù)據(jù)流很大程度減少了重復(fù)代碼的使用組件化可組合一個(gè)組件易于和其它組件一起使用,或者嵌套在另一個(gè)組件內(nèi)部。在使用后,就變得很容易維護(hù),而且數(shù)據(jù)流非常清晰,容易解決遇到的。 歡迎移步我的博客閱讀:《React 入門實(shí)踐》 在寫這篇文章之前,我已經(jīng)接觸 React 有大半年了。在初步學(xué)習(xí) React 之后就正式應(yīng)用到項(xiàng)...
摘要:是一個(gè)程序架構(gòu),源于提出的一種架構(gòu),然而,它不僅可以應(yīng)用于,還可以應(yīng)用于其他任何框架中。有以下職責(zé)維持應(yīng)用的提供方法獲取提供方法更新通過注冊(cè)監(jiān)聽器通過返回的函數(shù)注銷監(jiān)聽器。同時(shí),的返回值實(shí)際上是一個(gè)函數(shù)可以解除監(jiān)聽。 Redux是一個(gè)程序架構(gòu),源于Flux(Facebook提出的一種架構(gòu)),然而,它不僅可以應(yīng)用于React,還可以應(yīng)用于其他任何框架中。值得一提的是,Redux的源代碼很...
閱讀 2955·2021-11-25 09:43
閱讀 3330·2021-11-24 09:39
閱讀 2836·2021-09-22 15:59
閱讀 2185·2021-09-13 10:24
閱讀 514·2019-08-29 17:02
閱讀 2105·2019-08-29 13:23
閱讀 3066·2019-08-29 13:06
閱讀 3542·2019-08-29 13:04