摘要:主要用于構(gòu)建,被認(rèn)為是中的視圖。高效通過對的模擬,最大限度地減少與的交互。也就是說,用戶負(fù)責(zé)視覺層,狀態(tài)管理則是全部交給它。該回調(diào)函數(shù)必須返回一個(gè)純對象,這個(gè)對象會與組件的合并。
React 定義:
React 是一個(gè)用于構(gòu)建用戶界面的 JAVASCRIPT 庫。
React主要用于構(gòu)建UI,React 被認(rèn)為是 MVC 中的 V(視圖)。
聲明式設(shè)計(jì) ?React采用聲明范式,可以輕松描述應(yīng)用。
高效 ?React通過對DOM的模擬,最大限度地減少與DOM的交互。
靈活 ?React可以與已知的庫或框架很好地配合。
JSX ? JSX 是 JavaScript 語法的擴(kuò)展
組件 ? 通過 React 構(gòu)建組件,使得代碼更加容易得到復(fù)用,能夠很好的應(yīng)用在大項(xiàng)目的開發(fā)中。
單向響應(yīng)的數(shù)據(jù)流 ? React 實(shí)現(xiàn)了單向響應(yīng)的數(shù)據(jù)流,從而減少了重復(fù)代碼,這也是它為什么比傳統(tǒng)數(shù)據(jù)綁定更簡單。
為什么需要Redux?React 只是 DOM 的一個(gè)抽象層,并不是 Web 應(yīng)用的完整解決方案。有兩個(gè)方面,react沒有涉及:
代碼結(jié)構(gòu)
組件之間的通信
React 能夠根據(jù) state 的變化來更新 view,setState 方法用于改變組件當(dāng)前的 state,所以可以把更改 state 的邏輯寫在各自的組件里,但這樣做的問題在于,當(dāng)項(xiàng)目邏輯變得越來越復(fù)雜的時(shí)候,將很難理清 state 跟 view 之間的對應(yīng)關(guān)系(一個(gè) state 的變化可能引起多個(gè) view 的變化,一個(gè) view 上面觸發(fā)的事件可能引起多個(gè) state 的改變)。我們需要對所有引起 state 變化的情況進(jìn)行統(tǒng)一管理,這種情況下,就可能需要用到redux了。
簡單說,React的核心是使用組件定義界面的表現(xiàn),那么在使用React的時(shí)候我們通常還需要一套機(jī)制去管理組件與組件之間,組件與數(shù)據(jù)模型之間的通信。
Redux 核心概念:
Store
作用:保存數(shù)據(jù)的地方,用于管理整個(gè)應(yīng)用的數(shù)據(jù)。它實(shí)際上是一個(gè) Object tree ,整個(gè)應(yīng)用只能有一個(gè) Store。
產(chǎn)生:傳入 reducer 和可選的初始 state 值,通過 createStore 方法生成
const store = createStore(reducer,initialState)
Action
作用:描述用戶的行為,也就是 View 發(fā)出的通知,被 store 接收
產(chǎn)生:通過 action creator 產(chǎn)生
const ADD_TODO = "添加 TODO"; function addTodo(text) { return { type: ADD_TODO, text } } const action = addTodo("Learn Redux")
Reducer
作用:根據(jù) action,計(jì)算出新的 state,是一個(gè)純函數(shù)
產(chǎn)生:傳入 state 和 action 參數(shù),返回一個(gè)新的 state
const reducer = function (state, action) { // ... return new_state; }
reducer 可以進(jìn)行拆分,每個(gè)子 reducer 分別負(fù)責(zé)計(jì)算 view 上面的特定組件,返回局部的 state,再通過 combineReducers 將 reducer 進(jìn)行合并,就可以合并得到完整的state,刷新視圖。
const chatReducer = combineReducers({ chatLog, statusMessage, userName })redux的工作流程:
Redux應(yīng)用數(shù)據(jù)的生命周期遵循下面4個(gè)步驟:
1)調(diào)用store.dispatch(action), 可以在任何地方進(jìn)行;
2)Redux store調(diào)用傳入的reducer函數(shù),并且將當(dāng)前的state樹與action傳入。
3)根reducer將多個(gè)子reducer輸出合并成一個(gè)單一的state樹;
4)Redux store保存了根reducer返回的完整的state樹。
5)新的state樹就是應(yīng)用的下一個(gè)狀態(tài),現(xiàn)在就可以根據(jù)新的state tree來渲染UI。
Flux 是一種架構(gòu)思想,專門解決軟件的結(jié)構(gòu)問題。它跟 MVC 架構(gòu)是同一類東西,但是更加簡單和清晰,它跟 React 本身沒什么關(guān)系,它可以用在 React 上,也可以用在別的框架上。
Flux 存在多種實(shí)現(xiàn)(至少15種),F(xiàn)acebook 官方實(shí)現(xiàn)版本:
View: 視圖層
Action(動(dòng)作):視圖層發(fā)出的消息(比如mouseClick)
Dispatcher(派發(fā)器):用來接收Actions、執(zhí)行回調(diào)函數(shù)
Store(數(shù)據(jù)層):用來存放應(yīng)用的狀態(tài),一旦發(fā)生變動(dòng),就提醒Views要更新頁面
Flux的數(shù)據(jù)管理流程:Redux 的作用跟 Flux 是一樣的,它可以看作是 Flux 的一種實(shí)現(xiàn),但是又有點(diǎn)不同,具體的不同總結(jié)起來就是:
Redux 只有一個(gè) store 而 Flux 里面會有多個(gè) store 存儲應(yīng)用數(shù)據(jù),并在 store 里面執(zhí)行更新邏輯,當(dāng) store 變化的時(shí)候再通知 controller-view 更新自己的數(shù)據(jù),Redux 將各個(gè) store 整合成一個(gè)完整的 store,并且可以根據(jù)這個(gè) store 推導(dǎo)出應(yīng)用完整的 state。
沒有 Dispatcher。 Redux 中沒有 Dispatcher 的概念,它使用 reducer 來進(jìn)行事件的處理,它根據(jù)應(yīng)用的狀態(tài)和當(dāng)前的 action 推導(dǎo)出新的 state。Redux 中有多個(gè) reducer,每個(gè) reducer 負(fù)責(zé)維護(hù)應(yīng)用整體 state 樹中的某一部分,多個(gè) reducer 可以通過 combineReducers 方法合成一個(gè)根reducer,這個(gè)根reducer負(fù)責(zé)維護(hù)完整的 state,當(dāng)一個(gè) action 被發(fā)出,store 會調(diào)用 dispatch 方法向某個(gè)特定的 reducer 傳遞該 action,reducer 收到 action 之后執(zhí)行對應(yīng)的更新邏輯然后返回一個(gè)新的 state,state 的更新最終會傳遞到根reducer處,返回一個(gè)全新的完整的 state,然后傳遞給 view。
簡單說,Redux 和 Flux 之間最大的區(qū)別就是對 store/reducer 的抽象,F(xiàn)lux 中 store 是各自為戰(zhàn)的,每個(gè) store 只對對應(yīng)的 controller-view 負(fù)責(zé),每次更新都只通知對應(yīng)的 controller-view;而 Redux 中各子 reducer 都是由根reducer統(tǒng)一管理的,每個(gè)子reducer的變化都要經(jīng)過根reducer的整合。
flux與redux對比圖: flux redux React-Redux為了方便使用,Redux 的作者封裝了一個(gè) React 專用的庫 React-Redux。
這個(gè)庫是可以選用的。實(shí)際項(xiàng)目可以選擇直接使用 Redux,或者使用 React-Redux。React-Redux 雖然提供了便利,但需要掌握額外的 API,并且要遵守它的組件拆分規(guī)范。
React-Redux 將所有組件分成兩大類:UI 組件和容器組件。
UI組件特點(diǎn):
只負(fù)責(zé) UI 的呈現(xiàn),不帶有任何業(yè)務(wù)邏輯
沒有狀態(tài)(即不使用this.state這個(gè)變量)
所有數(shù)據(jù)都由參數(shù)(this.props)提供
不使用任何 Redux 的 API
容器組件特點(diǎn):
負(fù)責(zé)管理數(shù)據(jù)和業(yè)務(wù)邏輯,不負(fù)責(zé) UI 的呈現(xiàn)
帶有內(nèi)部狀態(tài)
使用 Redux 的 API
簡單說:UI 組件負(fù)責(zé) UI 的呈現(xiàn),容器組件負(fù)責(zé)管理數(shù)據(jù)和邏輯。
React-Redux 規(guī)定,所有的 UI 組件都由用戶提供,容器組件則是由 React-Redux 自動(dòng)生成。也就是說,用戶負(fù)責(zé)視覺層,狀態(tài)管理則是全部交給它。
connect([mapStateToProps], [mapDispatchToProps], [mergeProps],[options])
connect()用于從 UI 組件生成容器組件。
connect的意思,就是將這兩種組件連起來。
mapStateToProps是一個(gè)函數(shù)。
它的作用就是像它的名字那樣,建立一個(gè)從(外部的)state對象到(UI 組件的)props對象的映射關(guān)系。
[mapStateToProps(state, [ownProps]): stateProps] (Function)
任何時(shí)候,只要 Redux store 發(fā)生改變,mapStateToProps 函數(shù)就會被調(diào)用。該回調(diào)函數(shù)必須返回一個(gè)純對象,這個(gè)對象會與組件的 props 合并。如果你省略了這個(gè)參數(shù),你的組件將不會監(jiān)聽 Redux store。第二個(gè)參數(shù) ownProps,為傳遞到組件的 props。
mapDispatchToProps是connect函數(shù)的第二個(gè)參數(shù),用來建立 UI 組件的參數(shù)到store.dispatch方法的映射。也就是說,它定義了哪些用戶的操作應(yīng)該當(dāng)作 Action,傳給 Store。它可以是一個(gè)函數(shù),也可以是一個(gè)對象。
connect 方法生成容器組件以后,需要讓容器組件拿到state對象,才能生成 UI 組件的參數(shù)。
React-Redux 提供Provider組件,可以讓容器組件拿到state。
React-router采用react組件的方式來實(shí)現(xiàn)router,通過管理 URL,實(shí)現(xiàn)組件的切換和狀態(tài)的變化。
相關(guān)路由組件::用于取代a元素,生成一個(gè)鏈接,允許用戶點(diǎn)擊后跳轉(zhuǎn)到另一個(gè)路由。它基本上就是a元素的React 版本,可以接收Router的狀態(tài)。
相關(guān)路由屬性:path 屬性:Route組件的path屬性指定路由的匹配規(guī)則
histroy 屬性: Router組件的history屬性,用來監(jiān)聽瀏覽器地址欄的變化,并將URL解析成一個(gè)地址對象,供 React Router 匹配。
render((Demo的思路://開始創(chuàng)建路由表 ), document.getElementById("example"))//聲明每一個(gè)路由 //每個(gè)路由
設(shè)計(jì)好整個(gè)應(yīng)用的state
根據(jù)用戶在view上的行為,定義好所有action
根據(jù)定義好的action,創(chuàng)建相應(yīng)的reducer處理state,合并reducer
根據(jù)定義好的reducer,生成store
通過
編寫UI組件,并通過connect自動(dòng)生成容器組件
根據(jù)url,react-router調(diào)用相應(yīng)的組件,顯示view
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/82893.html
摘要:介紹快速開始是的官方綁定庫。通常你可以以下面這種方式調(diào)用方法基礎(chǔ)教程為了進(jìn)一步了解如何實(shí)際使用,我們將一步一步創(chuàng)建一個(gè)一個(gè)實(shí)例跳轉(zhuǎn)到 介紹 快速開始 React-Redux是Redux的官方React綁定庫。它能夠使你的React組件從Redux store中讀取數(shù)據(jù),并且向store分發(fā)actions以更新數(shù)據(jù) 安裝 在你的React app中使用React-Redux: npm i...
摘要:的實(shí)現(xiàn)原理作為一個(gè)通用的模塊,主要還是用來應(yīng)用項(xiàng)目中的變更通過做連接,可以在的項(xiàng)目中將兩者結(jié)合的更好。上述便是兩個(gè)核心的用法啦。如有不對,還請指正。 react-redux的實(shí)現(xiàn)原理: Redux作為一個(gè)通用的模塊,主要還是用來應(yīng)用項(xiàng)目中state的變更,通過react-redux做連接,可以在React+Redux的項(xiàng)目中將兩者結(jié)合的更好。 React-redux是一個(gè)輕量級的封裝庫...
摘要:上篇文章寫到了實(shí)現(xiàn)組件數(shù)據(jù)共享的方法,但是在中,作者提供了一個(gè)更優(yōu)雅簡便的模塊實(shí)現(xiàn)組件之間數(shù)據(jù)共享。那就是利用利用實(shí)現(xiàn)組件數(shù)據(jù)之間數(shù)據(jù)共享安裝從導(dǎo)入組件將賦予的屬性將根組件用包裹起來。 上篇文章寫到了redux實(shí)現(xiàn)組件數(shù)據(jù)共享的方法,但是在react中,redux作者提供了一個(gè)更優(yōu)雅簡便的模塊實(shí)現(xiàn)react組件之間數(shù)據(jù)共享。那就是利用react-redux 利用react-redux...
摘要:描述這個(gè)插件可以讓我們的代碼更加的簡潔和美觀。安裝使用提供了兩個(gè)重要的接口使用了這個(gè)插件,的和就可以忘記來,它們就用不著了?,F(xiàn)在有美女個(gè)。 可先查看我的redux簡單入門 react-redux簡介 react-redux是使用redux開發(fā)react時(shí)使用的一個(gè)插件,另外插一句,redux不是react的產(chǎn)品,vue和angular中也可以使用redux;下面簡單講解,如何使用rea...
摘要:屬性是必須的。需要一個(gè)與的一致。必須在的返回原。調(diào)試插件日志安裝組件。然后加入到中即可例如擴(kuò)展程序需要在應(yīng)用市場安裝然后在中使用增強(qiáng)功能將加入即可在線實(shí)例推薦閱讀手稿 React-Redux Redux Action function addTodo(text) { return { type: ADD_TODO, text } } type 屬性是必須的。...
摘要:和的結(jié)合簡述相信很多前端開發(fā)者都聽說或使用過,我曾寫過一篇關(guān)于快速理解的文章,雖說是快速理解,但實(shí)際上更應(yīng)該叫做復(fù)習(xí)吧。它通過高階函數(shù),純函數(shù)使我們在編寫組件時(shí)完全不用接觸相關(guān)內(nèi)容,只通過將組件和數(shù)據(jù)連接起來即可。 react-redux react和redux的結(jié)合 簡述 相信很多前端開發(fā)者都聽說或使用過react-redux,我曾寫過一篇關(guān)于快速理解redux的文章,雖說是快...
閱讀 3707·2021-11-24 10:22
閱讀 3780·2021-11-22 09:34
閱讀 2654·2021-11-15 11:39
閱讀 1584·2021-10-14 09:42
閱讀 3714·2021-10-08 10:04
閱讀 1617·2019-08-30 15:52
閱讀 920·2019-08-30 13:49
閱讀 3079·2019-08-30 11:21