應(yīng)該分幾個(gè)部分去了解一個(gè)新技術(shù)
一窄锅、技術(shù)的背景(解決了什么問題,什么模式)
Blue:
1木柬、過去的MVC開發(fā)模式是模型加視圖皆串,數(shù)據(jù)雙向綁定,直接操作DOM,當(dāng)數(shù)據(jù)交互復(fù)雜交錯(cuò)的時(shí)候眉枕,不方便應(yīng)用的開發(fā)恶复,同時(shí)直接對 DOM操作會(huì)延長請求數(shù)據(jù)時(shí)間怜森,數(shù)據(jù)雙向綁定可能導(dǎo)致不同頁面展示的數(shù)據(jù)錯(cuò)亂等問題,故不適用于大型應(yīng)用開發(fā)谤牡。
2副硅、react是 js框架,不是MVC開發(fā)模式拓哟,它是用于構(gòu)建可預(yù)期的和聲明式的web應(yīng)用想许,把頁面分割成一個(gè)個(gè)獨(dú)立的可重復(fù)使用的組件伶授,數(shù)據(jù)單向綁定断序,這樣在大型應(yīng)該開發(fā)過程中,可以很容易對各部分代碼進(jìn)行修改和管理糜烹,不同頁面可以重復(fù)使用一個(gè)組件违诗,又可以保證獨(dú)立數(shù)據(jù)交互。
3疮蹦、react的出現(xiàn)改善了之前MVC開發(fā)模式所暴露的缺點(diǎn)诸迟,滿足了大型應(yīng)用程序開發(fā)。
Bert:
沒錯(cuò)愕乎,不知道大家有沒有發(fā)現(xiàn)阵苇,現(xiàn)在很多地方都在取舍如何使用 "數(shù)據(jù)共享" 這個(gè)概念。
我們現(xiàn)在的四層架構(gòu)感论,雖然提取出了微服務(wù)绅项,但是業(yè)務(wù)層之間是隔離的。
數(shù)據(jù)庫比肄,也會(huì)因?yàn)闃I(yè)務(wù)方面的因素快耿,使用數(shù)據(jù)冗余。
作為新手在各個(gè)論壇上看到大神們?nèi)绾翁崛〕鲆粋€(gè)非常通用的方法芳绩,就會(huì)羨慕不已掀亥,實(shí)際工作共也會(huì)被大家噴,為什么這里長得一樣妥色,不抽取成公共的搪花?
實(shí)際上抽象是一個(gè)高級的活,對于底層開發(fā)而言嘹害,不深刻理解上下文撮竿,做出來的公用方法都是瞎扯淡。
所以現(xiàn)階段很多框架幫助大家實(shí)現(xiàn)數(shù)據(jù)共享吼拥,雙向綁定等倚聚,用起來很舒服,但在維護(hù)階段非常痛苦凿可,往往牽一發(fā)動(dòng)全身惑折。
SiHang:
react的功能其實(shí)很單一授账,主要負(fù)責(zé)渲染的功能,react只負(fù)責(zé)ui渲染惨驶,想要做好一個(gè)項(xiàng)目白热,往往需要其他庫和工具的配合,比如用redux來管理數(shù)據(jù)粗卜,react需要掌握es6
Bert:
為什么我喜歡React屋确?傳統(tǒng)的框架都是在js里面操作DOM,是緊耦合的续扔,而React是真正做到松耦合的語言攻臀。
作為React的開發(fā)者,大家一定要習(xí)慣一點(diǎn):所有的操作能有數(shù)據(jù)解決纱昧,就不要去操作DOM刨啸。
就是因?yàn)镽eact的松耦合,所以微信可以做出小程序识脆。(這是我個(gè)人的理解)
所有的數(shù)據(jù)设联,都可以使用Js,而UI層灼捂,用什么體現(xiàn)總要嗎离例?使用Html還是XML又或者其他?
React真正的做到讓開發(fā)人員專心寫Js悉稠,把渲染的工作交給組件宫蛆。
我覺得這個(gè)是未來前端發(fā)展的一個(gè)大方向。
Jack:
react提供了良好的虛擬dom對象偎球,讓元素組件化洒扎,增強(qiáng)了可復(fù)用性
react如果非要和mvc關(guān)聯(lián)的話,只是其中的view層
模式:FP-函數(shù)式程序設(shè)計(jì)
Bert:
組件化的思維衰絮,讓開發(fā)更容易理解組件復(fù)用這個(gè)思維袍冷,其實(shí)所有框架都是可以復(fù)用的,只是對于開發(fā)而言沒有規(guī)范猫牡。
虛擬DOM的好處不僅僅與復(fù)用胡诗,而是為JS何HTML分離打下了基礎(chǔ),通過算法加速了頁面解析速度淌友。
React在整體看過去確實(shí)是做的view的事情煌恢。
函數(shù)式編程的最佳實(shí)例是Redux,而不是React
lLQunBin:
通過構(gòu)造虛擬DOM提高了Web的性能震庭,解決了復(fù)雜和頻繁的DOM操作產(chǎn)生性能的問題瑰抵,
采用的是組件化開發(fā)模式,總要操作于View是視圖層對頁面進(jìn)行開發(fā)
Bert:
理解的不錯(cuò)器联,虛擬DOM不僅僅提高了性能二汛,傳統(tǒng)開發(fā)模式的性能與React不分高下婿崭,虛擬DOM起到的決定性作用是讓開發(fā)人員脫離了DOM操作,且不會(huì)降低性能肴颊。
JiaWei
a) 解決大量操作節(jié)點(diǎn)的需要氓栈;
b) 組件化;
c) 提高性能婿着;
d) 單向數(shù)據(jù)流授瘦;
Bert:
該說的都被你總結(jié)了,最好還是加上一些自己的理解竟宋,很多東西百度一下出來對自己的提升幫助不大 >.<
Rex:
采用了MVVM模式提完,通過DOM的虛擬減少DOM的交互
Bert:
理解不到位,可以看看前面的回復(fù)
ShanShan:
React:用于構(gòu)建用戶界面的庫袜硫,僅僅關(guān)注UI層氯葬;解決面需要不斷加載導(dǎo)致速度很慢的問題挡篓;采用了虛擬DOM,把UI拆分成組件婉陷,引入了JSX語法規(guī)則,可以使用類似HTML的語法去寫js的函數(shù)調(diào)用
WebPack:把有依賴關(guān)系的各種文件打包成一系列的靜態(tài)資源
Bert:
大部分的UI框架都是關(guān)注UI層官研,且執(zhí)行速度并不滿秽澳,如Jquery,到目前為止性能都不弱戏羽。
WebPack是React生態(tài)體系之一担神,但不起到?jīng)Q定性作用,他只是做了打包編譯的活始花,如果有比他更合適的工具妄讯,卻換成本不大。
XuYang:
React 利用jsx語法構(gòu)建ui酷宵,有點(diǎn)類似于view層亥贸。Redux 用來處理數(shù)據(jù)和邏輯,與react連接浇垦,對頁面數(shù)據(jù)進(jìn)行模塊化處理炕置,兩者結(jié)合起來類似于MVC框架。吃
Ant 是ui庫男韧,可以很好的與react結(jié)合朴摊。
Bert:
最重要的虛擬DOM你給漏了 ^_^
二、技術(shù)的體系(js,jsx,webpack,npm)
Blue:
該新技術(shù)主要包含了js\jsx\webpack\npm這幾部分內(nèi)容此虑, js作為主體甚纲,貫穿整個(gè)應(yīng)程序開發(fā);jsx的作用是可以在js 中插入html標(biāo)簽朦前;webpack相當(dāng)于模塊打包機(jī)介杆,它把整個(gè)項(xiàng)目看成一個(gè)整體讹弯,通過一個(gè)切入點(diǎn),查詢各個(gè)模塊中無法被js解析對內(nèi)容進(jìn)行打包这溅,然后解析成可以被js 識別對代碼渲染到頁面组民;npm是react開發(fā)技術(shù)中所需要的依賴插件,引入各自插件有利于在開發(fā)過程中悲靴,開發(fā)出豐富的應(yīng)用臭胜。
Bert:
大家都被括號的內(nèi)容局限了,其實(shí)React生態(tài)除了這些還有很多癞尚,希望多去了解了解耸三,像Redux、Immutable等浇揩,都是技術(shù)體系中的仪壮,只是現(xiàn)在沒有使用。
SiHang:
react 還是一個(gè)類似組件包的東西 由多個(gè)小組件構(gòu)成
Bert:
起碼解釋一下括號里的內(nèi)容嘛 >.<
Jack:
js:JavaScript一種直譯式腳本語言胳徽,是一種動(dòng)態(tài)類型积锅、弱類型、基于原型的語言养盗,內(nèi)置支持類型缚陷。它的解釋器被稱為JavaScript引擎,為瀏覽器的一部分往核,廣泛用于客戶端的腳本語言
jsx:JSX就是Javascript和XML結(jié)合的一種格式箫爷。React發(fā)明了JSX,利用HTML語法來創(chuàng)建虛擬DOM聂儒。當(dāng)遇到<虎锚,JSX就當(dāng)HTML解析,遇到{就當(dāng)JavaScript解析衩婚。
webpack:webpack是一款模塊加載器兼打包工具窜护,它能把各種資源,例如JS(含JSX)谅猾、coffee柄慰、樣式(含less/sass)、圖片等都作為模塊來使用和處理税娜。
npm:包管理工具
Bert:
多想想坐搔,其他的東西,還有哪些技術(shù)體系敬矩,可以在評論中留言概行。
LiQunBin:
1.JS基于ES6的javascript進(jìn)行發(fā)開
2.JSX就是Javascript和XML結(jié)合的一種格式。React發(fā)明了JSX弧岳,利用HTML語法來創(chuàng)建虛擬DOM凳忙。當(dāng)遇到<业踏,JSX就當(dāng)HTML解析,遇到{就當(dāng)JavaScript解析涧卵。
3.webpack用來打包項(xiàng)目代碼勤家,解析成瀏覽器可以識別的代碼
4.npm用來安裝工程環(huán)境
Bert:
其實(shí)ES5也是可以使用的,但是ES6的語法更加規(guī)范柳恐,所以我們使用了ES6
JiaWei:
a) Webpack:簡化開發(fā)復(fù)雜度伐脖,提供各種依賴包,并將瀏覽器無法識別或者識別困難的JS乐设、css等轉(zhuǎn)換為瀏覽器可以識別的代碼讼庇。
b) Npm:用于啟動(dòng)項(xiàng)目,提供服務(wù)近尚。
c) JSX:可以使組件和組件之間的結(jié)構(gòu)看上去更加清晰蠕啄。
Bert:
多想想,結(jié)合以往的經(jīng)驗(yàn)戈锻,思考下還有哪些技術(shù)體系歼跟。
Rex:
js、jsx舶沛、webpack嘹承、npm、組件
ShanShan:
jsx:javascript 和xml
webpack:這個(gè)配置文件主要分為三大塊:
1.entry 入口文件 讓webpack用哪個(gè)文件作為項(xiàng)目的入口
2.output 出口 讓webpack把處理完成的文件放在哪里
3.module 模塊 要用什么不同的模塊來處理各種類型的文件
如何配置不清楚如庭,需要繼續(xù)學(xué)習(xí)
npm:用來安裝所需要的依賴
Bert:
Webpack的文檔很多,但是我們實(shí)際用的到的很少撼港,學(xué)習(xí)一門工具坪它,最好的方式是有需要的時(shí)候去學(xué)習(xí),如果只是干學(xué)不用帝牡,會(huì)影響到自己的熱情往毡。
XuYang:
Js 部分主要使用ES6/ES7,原生js體系靶溜。
Jsx 可以使react直接支持 html寫法來編寫ui框架开瞭,用來代替常規(guī)的js寫法,更趨向于原生HTML寫法罩息。減少很多工作量嗤详。
Webpack 是自動(dòng)化發(fā)布工具,用來編譯es6/es7 自動(dòng)打包瓷炮,自動(dòng)壓縮葱色,自動(dòng)化發(fā)布方面的工作
NPM 包管理工具。
Bert:
大家都被局限了~~~
三娘香、采用的開源框架(react + ant苍狰,整體架構(gòu)是怎樣的)
Blue:
react為主體結(jié)構(gòu)办龄,ant是UI框架,通過view綁定方法到action,在action里面通過標(biāo)記連接reduce,在reduce 里面進(jìn)行攔截淋昭,把數(shù)據(jù)存入state俐填,渲染到頁面中,并且實(shí)現(xiàn)了前后端分離翔忽。
Bert:
Antd只是幫我們做了組件分裝的活玷禽,方便了我們的開發(fā),且使用它們做出來的組件呀打,更方便矢赁、易用、穩(wěn)定贬丛。
SiHang:
redux 則來處理大量數(shù)據(jù)交互的問題 antd 算是react 配套的組件 是寫好的東西 就像bootstrop
Bert:
理解的不錯(cuò)撩银,如果有能力,我們可以做自己的組件庫豺憔。
Jack:
采用的開源框架(react + ant额获,整體架構(gòu)是怎樣的)
react :負(fù)責(zé)提供dom生成
ant :提供UI庫
Bert:
解釋了一遍沒有講到要點(diǎn)。
LiQunBin:
Ant UI框架恭应,基于react組件話開發(fā)模式抄邀,整體的界面效果很好,也有著豐富的API可以使用昼榛,用起來也很方便
Bert:
沒錯(cuò)境肾,Antd做的比我們自己做的好,那么就先用胆屿,邊用邊學(xué)習(xí)奥喻。
JiaWei:
a) ant基于react來開發(fā),基本上開發(fā)者不用過多的編寫html代碼以及CSS非迹。他們兩個(gè)的關(guān)系類似于:ant為菜环鲤,react是刀,開發(fā)者是廚師憎兽,npn/node是爐子和火冷离、webpack為調(diào)味品。廚師用刀處理菜纯命,然后烹飪出一盤菜西剥。
Rex:
不懂
ShanShan:
采用的開源框架(react + ant,整體架構(gòu)是怎樣的)
采用的開源框架是react-webpack-redux
架構(gòu)里面主要包括以下文件夾:
conf-配置文件
node_modules-安裝的依賴包
actions - 行為的抽象
components - 可復(fù)用的組件
containers-不知道
images-存儲(chǔ)圖片
reducers-響應(yīng)的抽象(目前在項(xiàng)目里面都是存儲(chǔ)的數(shù)據(jù)文件)
static-靜態(tài)資源文件
sources-資源管理
stores-reducer放在stores,action作用于stores扎附,reducer根據(jù)stores進(jìn)行響應(yīng)
test-單元測試
這個(gè)框架里面action蔫耽、reducers和store三者的使用比較迷糊
Bert:
這里提到Webpack和Redux很好,證明沒有被題目局限,Webpack和Redux都是開源框架之一匙铡。
action图甜、reducers和store是屬于Redux的,可以先去看看相關(guān)文檔鳖眼,問一些更深入的問題黑毅。
XuYang:
入口entires 定義路由組件,根據(jù)路由調(diào)用view頁面钦讳,view頁面調(diào)用 不同的components組件矿瘦,頁面或者組件定義事件響應(yīng) 觸發(fā)actions,actions調(diào)用相對應(yīng)得reducers層愿卒,根據(jù)type 來執(zhí)行響應(yīng)的reducers層缚去,reducers用來處理數(shù)據(jù)的改變以及改變stroe ,根據(jù)react的機(jī)制來對頁面數(shù)據(jù)進(jìn)行修改琼开。Api層用來調(diào)用服務(wù)器數(shù)據(jù)易结,constants定義常量。Uitl定義公用方法柜候。Antd用來支持ui搞动。類似于components的組件。
Bert:
看的出來使用起來越來越熟悉了渣刷,快要出師了 ^.^
其實(shí)整體架構(gòu)就是:
Redux操作數(shù)據(jù)(實(shí)現(xiàn)數(shù)據(jù)共享)
Antd負(fù)責(zé)UI鹦肿,提供現(xiàn)成的組件
Webpack負(fù)責(zé)打包編譯。
四辅柴、開發(fā)的框架(在開源框架基礎(chǔ)上增加哪些部分箩溃?)
Blue:
可能是增加了cpmmponent,react不是直接對DOM進(jìn)行操作 碌识,而是通過虛擬的DOM碾篡,把數(shù)據(jù)放在虛擬DOM上,計(jì)算最小的時(shí)間請求服務(wù)器筏餐,也減少了請求服務(wù)器次數(shù)。
Bert:
這個(gè)題目比較深入牡拇,需要可以理解各種關(guān)系后梳理出來魁瞪,有更好的梳理隨時(shí)在評論中留言
Jack:
redux:輕量級的數(shù)據(jù)管理工具 (讓每個(gè)react生成的虛擬dom 中的數(shù)據(jù)可以 互相調(diào)用 )
Bert:
我們的腳手架在基礎(chǔ)框架上增加了什么,如何讓他們結(jié)合起來工作的惠呼。
LiQunBin:
對數(shù)據(jù)和方法進(jìn)行分開放置导俘,分開管理;
通過type標(biāo)記連接方法與變量
JiaWei:
4. 開發(fā)的框架(在開源框架基礎(chǔ)上增加哪些部分)
a) ES6剔蹋;
b) React;
c) Redux;
d) Less;
e) Ant-design;
f) Webpack;
g) Npm/cnpm;
h) Git;
i) json
Rex:
nodejs旅薄、redux
ShanShan:
采用開源框架react-webpack-redux
使用yeoman初始化項(xiàng)目yo react-webpack-redux “項(xiàng)目名字”,增加的部分現(xiàn)在不知道
XuYang:
增加了api的數(shù)據(jù)處理
增加了store的reducers將所有reducers合并處理。封裝了數(shù)據(jù)請求的三個(gè)狀態(tài)'PENDING', 'SUCCESS', 'ERROR'
Bert:
沒錯(cuò),繼續(xù)深入少梁,還有很多洛口。
大家可以看看我之前寫的 React+redux+webpack 項(xiàng)目構(gòu)建:初具規(guī)模
五、練習(xí)凯沪,遇到問題第焰,解決問題
Blue:
action 里面的params{}還是很模糊;
Bert:
閱讀 uitl/index.js
export function createReducer(initialparams, reducerMap) {
return (params = initialparams, action) => {
const reducer = reducerMap[action.type]
return reducer ? reducer(params, action.payload ? action.payload : {}, action.params) : params
}
}
這快代碼是做什么用的妨马,可以在評論中留言挺举。
SiHang:
寫代碼開始的時(shí)候,各種語法錯(cuò)誤烘跺, 引用不到位湘纵,看代碼出錯(cuò)提示,依賴問題滤淳,引用路由顯示頁面梧喷。。等等
Bert:
現(xiàn)在呢娇钱,還有入到類似的問題嗎伤柄?或者有其他問題?在評論中留言
JiaWei:
a) 需要的不是一個(gè)已經(jīng)搭建完成的模板文搂,然后我們對其進(jìn)行各種擴(kuò)展适刀,而是需要弄懂怎么去搭建一個(gè)框架模版出來,授人以魚不如授人以漁煤蹭。
b) 框架有各種文件夾笔喉,但是各文件夾有什么作用,分別是做什么的硝皂,在框架中主要是放置一些什么東西的常挚。(所有頁面調(diào)用的公共方法、單個(gè)頁面的方法稽物、數(shù)據(jù)的傳遞奄毡、數(shù)據(jù)的獲取、狀態(tài)的傳遞)
我的疑問:
1. ES6贝或,框架本身也可以使用原生的JS吼过,為什么要使用ES6。
2. React學(xué)習(xí)起來咪奖,概念簡單盗忱,也不是太復(fù)雜。但是學(xué)習(xí)成本還是比較高羊赵,難度比較大趟佃。也比較繁瑣。
如何使用可以在我寫的 Redux使用筆記中看到相關(guān)內(nèi)容,其他的在前面有做回復(fù)闲昭,如果有新問題罐寨,可以評論給我
ShanShan:
說一下自己的學(xué)習(xí)過程:我感覺我個(gè)人在學(xué)習(xí)這個(gè)框架的過程中,從一開始接觸的是react語法和組件的使用汤纸,忽略了這個(gè)框架應(yīng)該如何搭建衩茸,配置文件應(yīng)該如何配置,自己去網(wǎng)上百度的時(shí)候到處都是react+webpack之類的文章贮泞,看著很迷糊楞慈,學(xué)的時(shí)候比較迷茫,因?yàn)槲抑耙矝]有接觸過前端啃擦,好多語法什么的本來就特別弱囊蓝,概念也沒有那么清楚,所以有沒有什么比較好的方法學(xué)習(xí)這套框架
可以看看我寫的 Redux 使用筆記令蛉,有問題評論中留言
XuYang:
1聚霜、antd的版本問題,api與實(shí)際不太一樣珠叔。解決方法:升級antd版本
2蝎宇、state的深度拷貝問題,解決辦法:使用immutable
3祷安、css修改antd默認(rèn)樣式問題姥芥。解決辦法:暫時(shí)沒有很好的解決辦法,提升自己的css權(quán)重汇鞭,覆蓋原樣式
Bert:
有經(jīng)驗(yàn)的高手就是不一般凉唐,哈哈
YangGuang
關(guān)于React
一.技術(shù)背景
在Web開發(fā)中,總是需要把變化的數(shù)據(jù)實(shí)時(shí)反應(yīng)到UI上霍骄,這時(shí)就需要對DOM進(jìn)行操作台囱,而復(fù)雜或頻繁的DOM操作通常是性能瓶頸產(chǎn)生的原因,為了解決這個(gè)問題读整,React引入了虛擬DOM機(jī)制:每當(dāng)數(shù)據(jù)變化時(shí)簿训,React會(huì)重新構(gòu)建DOM樹,然后將當(dāng)前DOM樹與上一次的DOM樹進(jìn)行對比米间,得到區(qū)別煎楣,然后僅僅將需要變化的部分進(jìn)行實(shí)際的DOM更新,由于虛擬DOM是純粹的JS數(shù)據(jù)結(jié)構(gòu)车伞,性能比原生的DOM快很多,而對實(shí)際DOM操作的部分僅僅是Diff部分喻喳,因而能夠達(dá)到提高性能的目的另玖。
二. 主要特點(diǎn):
1.組件化: 封裝起來的具有獨(dú)立功能的組件,各個(gè)組件維護(hù)自己的狀態(tài)和UI,當(dāng)狀態(tài)變更時(shí)自動(dòng)重新渲染整個(gè)組件谦去。這是React的核心思想慷丽,組件化的方式帶來了UI功能模塊之間的分離。
2.JSX語法: 允許HTML與JavaScript混寫鳄哭,基本的語法規(guī)則是: 遇到HTML標(biāo)簽<>就用HTML解析; 遇到代碼塊{}就用JavaScript規(guī)則解析要糊。它允許直接在模板上插入JavaScript變量,如果這個(gè)變量是一個(gè)數(shù)組妆丘,則會(huì)展開這個(gè)數(shù)組的所有成員锄俄。
三.重要概念
1.this.props : 首先是一個(gè)對象,它的屬性與組件的屬性一一對應(yīng)勺拣,但是有一個(gè)例外奶赠,那就是this.props.children
2.this.props.children : 表示組件的所有子節(jié)點(diǎn),它的值有三種可能
1> 沒有子節(jié)點(diǎn) 數(shù)據(jù)類型是undefined
2> 只有一個(gè) 數(shù)據(jù)類型是object
3> 多個(gè) 數(shù)據(jù)類型是array
React提供工具方法React.Children來處理這種情況
3.PropTypes:提供參數(shù)類型檢驗(yàn)機(jī)制药有,類型不一致會(huì)導(dǎo)致報(bào)錯(cuò)毅戈,而getDefaultProps可以設(shè)置組件屬性的默認(rèn)值,
4.獲取真實(shí)的DOM節(jié)點(diǎn)(ref屬性):組件并不是真實(shí)的DOM節(jié)點(diǎn)愤惰,而是存在內(nèi)存中的一種數(shù)據(jù)結(jié)構(gòu)苇经,叫做虛擬DOM,只有在插入到文檔以后宦言,才會(huì)變成真實(shí)的DOM扇单。通過this.refs.[refName]會(huì)返回這個(gè)真實(shí)的DOM節(jié)點(diǎn)。
5.this.state:通過getInitialState方法用于定義初始狀態(tài)蜡励,也是一個(gè)對象令花,這個(gè)對象可以通過this.state獲取凉倚;this.setState修改狀態(tài)兼都,然后自動(dòng)調(diào)用this.render方法,再次渲染組件稽寒。
6. this.props 與 this.state的比較:都用于描述組件的特性扮碧,前者表示那些一旦定義,就不再改變的特性杏糙,而后者是隨著用戶互動(dòng)而產(chǎn)生變化的特性慎王。
關(guān)于Redux
一.技術(shù)背景
隨著JavaScript單頁應(yīng)用開發(fā)日趨復(fù)雜,JavaScript需要管理比以往更多的state宏侍,管理不斷變化的state已經(jīng)變得非常困難赖淤,而React也沒有涉及到state中數(shù)據(jù)處理的問題,也就是組件之間的通信谅河,而Redux就是為了解決這個(gè)問題咱旱。
二. 主要特點(diǎn)
Redux有三大原則:
(1) 單一數(shù)據(jù)源: 整個(gè)應(yīng)用的state被儲(chǔ)存在一棵object tree中确丢,并且這個(gè)object tree 只存在于唯一一個(gè)store中。
(2) State是只讀的吐限。唯一改變state的方法就是出發(fā)action鲜侥,action是一個(gè)用于描述已發(fā)生事件的普通對象。
(3) 使用純函數(shù)來執(zhí)行修改: 為了描述action如何改變state, 需要使用reducers诸典。Reducer只是一些純函數(shù)描函,接受先前的state和action,然后返回新的state狐粱。
三.重要概念
1. Action: 將數(shù)據(jù)從應(yīng)用傳到store舀寓,是store數(shù)據(jù)的唯一來源,一般是通過store.dispatch()將action傳到store脑奠,但是多數(shù)情況下會(huì)使用react-redux提供的connect()幫助器來調(diào)用基公。
2.Reducer: Action只是描述有事情發(fā)生這個(gè)事實(shí),但是沒有指明應(yīng)用該如何更新state宋欺。而Reducer正是做這件事情轰豆。
3.Store: 將Action和Reducer聯(lián)系到一起的對象。Redux應(yīng)用只有唯一一個(gè)store齿诞。
關(guān)于React-Redux
1.容器組件使用connect() 方法連接Redux酸休,通過這個(gè)方法可以從Redux store中指定準(zhǔn)確的state到你想要獲取的組件中
2.mapStateToProps()通過props獲取的Redux全局的組件想要的state
3.mapDispatchToProps() 通過props獲取的想要的action創(chuàng)建函數(shù)