摘要:的學(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框架
視圖(View):用戶(hù)界面。 => 傳送指令到 Controller
控制器(Controller):業(yè)務(wù)邏輯 => 完成業(yè)務(wù)邏輯后,要求 Model 改變狀態(tài)
模型(Model):數(shù)據(jù)保存 => 將新的數(shù)據(jù)發(fā)送到 View,用戶(hù)得到反饋
故事的主人公小明,辛苦打拼多年,終于存到了買(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中主要方法:
createStore
combineReducers
bindActionCreators
applyMiddleWare
compose
原函數(shù)有三個(gè)參數(shù),這里只分析第一個(gè)參數(shù)reducer
參數(shù):reducerreducer: 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)行處理
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
摘要:前端進(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)、分析與...
摘要:應(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)用中所有的狀...
摘要:相關(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-...
摘要:損失函數(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)品。這就是...
摘要:前言最近發(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)程池的原理,了解到其是如...
閱讀 1818·2023-04-26 02:51
閱讀 2849·2021-09-10 10:50
閱讀 3026·2021-09-01 10:48
閱讀 3594·2019-08-30 15:53
閱讀 1816·2019-08-29 18:40
閱讀 405·2019-08-29 16:16
閱讀 2024·2019-08-29 13:21
閱讀 1816·2019-08-29 11:07