国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

如何通俗易懂的理解 redux

RaoMeng / 1293人閱讀

摘要:的學(xué)習(xí)筆記首先先了解下什么是框架框架視圖用戶(hù)界面。創(chuàng)建數(shù)組,保存監(jiān)聽(tīng)函數(shù)獲取倉(cāng)庫(kù)中當(dāng)前狀態(tài)只有調(diào)用方法才能更新倉(cāng)庫(kù)合并狀態(tài)執(zhí)行監(jiān)聽(tīng)函數(shù),更新添加監(jiān)聽(tīng)函數(shù)由于每次執(zhí)行后,都會(huì)執(zhí)行所以這一行的作用就是在初始化中所有的節(jié)點(diǎn)。

redux的學(xué)習(xí)筆記 首先先了解下什么是MVC框架
MVC框架(Model-View-Controller)

視圖(View):用戶(hù)界面。 => 傳送指令到 Controller

控制器(Controller):業(yè)務(wù)邏輯 => 完成業(yè)務(wù)邏輯后,要求 Model 改變狀態(tài)

模型(Model):數(shù)據(jù)保存 => 將新的數(shù)據(jù)發(fā)送到 View,用戶(hù)得到反饋

來(lái)個(gè)小故事幫助理解

故事的主人公小明,辛苦打拼多年,終于存到了買(mǎi)房的錢(qián),于是就屁顛屁顛的在首都的郊區(qū)買(mǎi)了一套120的毛坯房(當(dāng)前的房子的state),因?yàn)槭敲鞣浚匀皇浅隽艘恍┗A(chǔ)設(shè)施其他啥也沒(méi)有(initState),這問(wèn)題就來(lái)了,這毛坯房也不能住啊 ,這剛買(mǎi)完房也沒(méi)多少積蓄了,就想著找裝修公司簡(jiǎn)裝下,問(wèn)了價(jià)格之后,小明直接就憑著當(dāng)年在幼兒園打下的美術(shù)基礎(chǔ)畫(huà)了一張?jiān)O(shè)計(jì)圖,然后就和自己老婆分配了任務(wù),誰(shuí)該做什么,例如小明粉刷墻,經(jīng)過(guò)多天努力,總算是裝修完成了,此時(shí)小明的新房,從一個(gè)毛坯房,變成了一個(gè)豪華的毛坯房(更新之后的房子的state

1.首先回顧下這個(gè)故事: 小名的毛坯房 --> 畫(huà)出裝修圖紙 --> 小明分配任務(wù) --> 小明和自己老婆裝修 --> 豪華毛坯房
2.再來(lái)說(shuō)下Redux里的幾個(gè)核心概念,這里我們把React也加進(jìn)來(lái):

view(React)

store(state)

action

reducer

3.接下來(lái)看看Redux/React與這個(gè)故事的聯(lián)系:

view(React) = 第一次看到毛坯房

store(state) = 毛坯房空空如也,什么都沒(méi)有,只有基礎(chǔ)設(shè)施

action = 小明分配任務(wù)(誰(shuí)應(yīng)該干什么)

reducer = 具體任務(wù)都干些什么(小明粉刷墻)

4.所以這個(gè)過(guò)程應(yīng)該是這樣的
view ---> action ---> reducer ---> store(state) ---> view

5.如果放入一個(gè)web app中,首先store(state)決定了view,然后用戶(hù)與view的交互會(huì)產(chǎn)生action,這些action會(huì)觸發(fā)reducer因而改變state,然后state的改變又造成了view的變化。

redux 源碼簡(jiǎn)單分析

redux中主要方法:

createStore

combineReducers

bindActionCreators

applyMiddleWare

compose

這里主要分析一下createStore(reducer)

原函數(shù)有三個(gè)參數(shù),這里只分析第一個(gè)參數(shù)reducer
參數(shù):reducer

reducer: function類(lèi)型(而且是純函數(shù)),reducer的作用是,根據(jù)指定的action的type,進(jìn)行處理state,返回新的state

參數(shù):

action: 是一個(gè)對(duì)象或者函數(shù)(最終返回的也是對(duì)象),type是action必須有的屬性,reducer根據(jù)action.type處理state

state: 需要在這里初始化state,不然會(huì)報(bào)錯(cuò)

因?yàn)閞educer合并狀態(tài)是覆蓋式,所以需要先解構(gòu)出當(dāng)前狀態(tài),再進(jìn)行處理

store的返回值:返回值是三個(gè)方法

dispatch: 分發(fā)action,只能用dispatch修改store中的狀態(tài)

根據(jù)action查詢(xún)r(jià)educer中變state的方法,更新store tree

變更store tree后,依次執(zhí)行listener中所有響應(yīng)函數(shù)

getState: 獲取倉(cāng)庫(kù)中當(dāng)前狀態(tài)

subscribe: 注冊(cè)監(jiān)聽(tīng)函數(shù),監(jiān)聽(tīng)state的變化

store 可以理解為一個(gè)全局變量,保存著你項(xiàng)目中所有需要保存的數(shù)據(jù),而這個(gè)全局變量加了一把密碼鎖,只有指定的密碼(dispatch({type:AAA}))進(jìn)行修改,因?yàn)槟阆氚。羰钦l(shuí)都能修改這個(gè)全局變量,而在你用這個(gè)變量之前,可能執(zhí)行的其他程序已經(jīng)對(duì)這個(gè)變量進(jìn)行了修改,這也是我們平時(shí)開(kāi)發(fā)的時(shí)候避免全局變量的原因,所以就要提高修該數(shù)據(jù)的權(quán)限。

    let createStore = (reducer)=>{
        var state;
        let listeners = []; 
         //創(chuàng)建數(shù)組,保存監(jiān)聽(tīng)函數(shù)
    
        let getState = ()=>state;
       // 獲取倉(cāng)庫(kù)中當(dāng)前狀態(tài)
       
        function dispatch(action){
            // 只有調(diào)用dispatch方法才能更新倉(cāng)庫(kù)
            state = reducer(state,action);
            // 合并狀態(tài)
            listeners.forEach(listener=>listener());
            //執(zhí)行監(jiān)聽(tīng)函數(shù),更新view
        }
        
        let subscribe = (listener)=>{
        listeners.push(listener);
        // 添加監(jiān)聽(tīng)函數(shù)
        }
        dispatch({})
        // 由于每次dispatch執(zhí)行后,redux都會(huì)執(zhí)行reducer
        //所以這一行的作用就是在初始化store tree中所有的state節(jié)點(diǎn)。
        return {
            getState,
            dispatch,
            subscribe
        }
    }

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/90172.html

相關(guān)文章

  • 前端進(jìn)階資源整理

    摘要:前端進(jìn)階進(jìn)階構(gòu)建項(xiàng)目一配置最佳實(shí)踐狀態(tài)管理之痛點(diǎn)分析與改良開(kāi)發(fā)中所謂狀態(tài)淺析從時(shí)間旅行的烏托邦,看狀態(tài)管理的設(shè)計(jì)誤區(qū)使用更好地處理數(shù)據(jù)愛(ài)彼迎房源詳情頁(yè)中的性能優(yōu)化從零開(kāi)始,在中構(gòu)建時(shí)間旅行式調(diào)試用輕松管理復(fù)雜狀態(tài)如何把業(yè)務(wù)邏輯這個(gè)故事講好和 前端進(jìn)階 webpack webpack進(jìn)階構(gòu)建項(xiàng)目(一) Webpack 4 配置最佳實(shí)踐 react Redux狀態(tài)管理之痛點(diǎn)、分析與...

    BlackMass 評(píng)論0 收藏0
  • 對(duì)React-redux中connect方法理解

    摘要:應(yīng)用中唯一的狀態(tài)應(yīng)用的子組件例子方法來(lái)看下函數(shù)到底是如何將和組件聯(lián)系在一起的,注意到文檔中有這樣的一句話(huà)并不會(huì)改變它連接的組件,而是提供一個(gè)經(jīng)過(guò)包裹的組件。 關(guān)于React-redux Redux是React全家桶的重要一員,之前在知乎上也看到類(lèi)似的提問(wèn):該如何通俗易懂的理解Redux? Redux是JavaScript的狀態(tài)容器,Redux的概念簡(jiǎn)單明了: 1. 應(yīng)用中所有的狀...

    Bryan 評(píng)論0 收藏0
  • react+react-router4+redux最新版構(gòu)建分享

    摘要:相關(guān)配置請(qǐng)參考中文文檔。關(guān)于的更多使用方法及理解需要詳細(xì)具體講解,涉及篇幅較大,本文暫不涉及,有興趣可以看文檔中文文檔,我會(huì)整理后再單獨(dú)章節(jié)分享接下來(lái)我們將編寫(xiě)路由組件這與有一些差別,原來(lái)的方法已經(jīng)不再使用,在中或組件從中引入。 ??????相信很多剛?cè)肟覴eact的小伙伴們有一個(gè)同樣的疑惑,由于React相關(guān)庫(kù)不斷的再進(jìn)行版本迭代,網(wǎng)上很多以前的技術(shù)分享變得不再適用。比如react-...

    weapon 評(píng)論0 收藏0
  • 神經(jīng)網(wǎng)絡(luò)中梯度下降與反向傳播關(guān)系(大白話(huà),通俗易懂版本)

    摘要:損失函數(shù)的作用可以理解為當(dāng)前向傳播得到的預(yù)測(cè)值與真實(shí)值接近時(shí),取較小值。 神經(jīng)網(wǎng)絡(luò) 神經(jīng)網(wǎng)絡(luò)就是一個(gè)萬(wàn)能的模型+誤差修正函數(shù),每次根據(jù)訓(xùn)練得到的結(jié)果與預(yù)想結(jié)果進(jìn)行誤差分析,進(jìn)而修改權(quán)值和閾值,一步一步得到能輸出和預(yù)想結(jié)果一致的模型。 舉一個(gè)例子:比如某廠(chǎng)商生產(chǎn)一種產(chǎn)品,投放到市場(chǎng)之后得到了消費(fèi)者的反饋,根據(jù)消費(fèi)者的反饋,廠(chǎng)商對(duì)產(chǎn)品進(jìn)一步升級(jí),優(yōu)化,從而生產(chǎn)出讓消費(fèi)者更滿(mǎn)意的產(chǎn)品。這就是...

    鄒立鵬 評(píng)論0 收藏0
  • 通俗易懂Java線(xiàn)程池原理

    摘要:前言最近發(fā)現(xiàn)很多小伙伴對(duì)于線(xiàn)程池的原理不是特別的理解,所以想通過(guò)這篇文章來(lái)讓大家更好的認(rèn)識(shí)線(xiàn)程池的原理,了解到其是如何工作的講解下面我會(huì)將線(xiàn)程池比作一個(gè)公司的一個(gè)部門(mén),介紹線(xiàn)程池如何工作的,同時(shí)介紹其中的一些關(guān)鍵組件和參數(shù)。 前言 最近發(fā)現(xiàn)很多小伙伴對(duì)于Java線(xiàn)程池ThreadPoolExecutor的原理不是特別的理解,所以想通過(guò)這篇文章來(lái)讓大家更好的認(rèn)識(shí)線(xiàn)程池的原理,了解到其是如...

    宋華 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<