為什么使用redux?
由于react是單向數(shù)據(jù)源赢赊,數(shù)據(jù)只能一層一層往下傳。假如開發(fā)過程中遇到多個組件共同使用的一個屬性(比如在A組件進(jìn)行修改级历,觸發(fā)B組件頁面渲染)域携,為了讓A、B組件都能使用這個屬性鱼喉,我們就必須把這個屬性放在A秀鞭、B組件公共的父組件里面,并且提供修改方法扛禽,再通過props把屬性值和修改方法一級一級傳遞到A锋边、B組件里面。假如A编曼、B組件要往上找很多級才有公共的父組件豆巨,那么后期維護(hù)會非常麻煩,于是就有了redux掐场。我們只需要把這個屬性交給redux管理往扔,讓redux負(fù)責(zé)這個屬性的查詢、修改熊户;并對外提供查詢萍膛、修改的方法,那么我們只需要在使用的組件里面引入redux嚷堡,通過redux提供的查詢方法(getStore)獲取這個屬性值蝗罗,通過redux提供的修改方法(dispatch發(fā)送一個action)去修改這個屬性值,就可以減少一層一層傳遞的過程,達(dá)到同樣的效果串塑。
由于數(shù)據(jù)通過redux進(jìn)行了集中管理沼琉,方便我們對數(shù)據(jù)進(jìn)行溯源,更快的定位數(shù)據(jù)相關(guān)的問題桩匪,可以大大減少維護(hù)難度打瘪。
redux剖析:
Redux遵循以下三個基本原則:
1、整個應(yīng)用只有唯一一個可信數(shù)據(jù)源傻昙,也就是只有一個 Store
2瑟慈、Store里面的數(shù)據(jù)(state)只能通過觸發(fā) Action 來更改
3、State 的更改必須寫成純函數(shù)(什么是純函數(shù))屋匕,也就是每次更改總是返回一個新的 State葛碧,在 Redux 里這種函數(shù)稱為 Reducer
redux核心是一個Store對象,通過這個對象存儲數(shù)據(jù)过吻。Store通過createStore()創(chuàng)建进泼,通過getStore()獲取。Store對象包含所有數(shù)據(jù)纤虽。如果想得到某個時點的數(shù)據(jù)乳绕,就要對 Store 生成快照。這種時點的數(shù)據(jù)集合逼纸,就叫做 State洋措,一個 State 對應(yīng)一個 View。Store唯一的數(shù)據(jù)來源(或者數(shù)據(jù)更新)是發(fā)送一個action到Reducer里面杰刽,Reducer接受舊的state和action菠发,Reducer會對他們進(jìn)行合并得到一個全新的state并返回,通過這種方式更新store對象贺嫂。