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

資訊專欄INFORMATION COLUMN

簡析React 和 Redux 的特點和關系

iOS122 / 1351人閱讀

摘要:這對復雜問題定位是有好處的。同時,也是純函數,與的是純函數呼應。強約束約定,增加了內聚合性。通過約定和全局的理解,可以減少的一些缺點。約定大于配置也是框架的主要發展方向。

React+Redux非常精煉,良好運用將發揮出極強勁的生產力。但最大的挑戰來自于函數式編程(FP)范式。在工程化過程中,架構(頂層)設計將是一個巨大的挑戰。要不然做出來的東西可能是一團亂麻。說到底,傳統框架與react+redux就是OO與FP編程范式的對決。

簡單學習某項技術并不能讓建立起一個全局理解,也很難工程化。所以,我們必須要看以下幾方面:

了解其獨特的東西。如React中組件是pure render函數。

置新技術于上下文中。將React放在flux、redux中。才能真正看到數據單向流動。

對比看到優勢。比其它的解決方案(vue, angluar,adobe flex),看其優勢。

挑戰。軟件領域里沒有銀彈,有好處一定有挑戰。

1. 談談對React的理解 1.1 獨特性

Virtual Dom:又一個虛擬層、中間層、cache層,大膽的跳出了web的DOM實現約束,實現更加理想的UI編程模型:樹型控件組織、統一事件、統一數據傳輸通道(props)。可以把Dom render到web,navtive的GUI系統上,這非常美妙,Learn once, Use Everywhere。

輕Component:React的component強調pure render,把業務邏輯放到其它子系統中,如redux中的reducer。

組件狀態(state)要最小化的,按官方說法,不是props傳入的,隨時間變化的,不能是通過其它的props和stat計算而來。

常用的設計模式:創建多個只負責渲染數據的無狀態(stateless)組件,在它們的上,是有狀態(stateful)組件。有狀態組件封裝了所有用戶的交互邏輯,而這些無狀態組件則負責聲明式地渲染數據。

設計范式是數據驅動組件來render。對比OO范式,OO有時會把compoent搞成自閉的、復雜的類,里面藏了太多的狀態,調測很難跟蹤。

1.2 置React于上下文中

React的virtual DOM想要構建一個理想的前端模型,那理想的前端編程到底是如何呢?我個人總結的4點:

構建基本UI能力:不論是組件拖拉(VB),還是寫樹型XML描述文檔,能快速做出和直覺一致的UI界面

數據綁定:與數據層(model)綁定數據,展示一個有數據的UI

用戶交互:用戶點擊、觸摸,程序完成業務邏輯,并反饋給用戶,表明是一個活的UI

UI布局:組織管理合個UI,一個UI調起另一個UI,自己死掉或藏起來。

構建基本UI能力:React完成的非常不錯,通過寫JSX能完成一個基本UI的構建。JSX是一個非常好的工程化手段,你第一眼看到它,可難會不爽。但新事物總要給它五分鐘!品味一下,你會發現這樣做更內聚,更務實的把計算與顯示內聚在一個地方,甚至你還可以把css樣式以inline sytle的方式寫在js文件里。最重要的是它可以把讓XML化的組件與js完美混合計算!

在數據綁定:React通過父子組件的props數據通訊協議,可以漂亮的完成初始數據綁定。這個props做得簡單而高效,大亮點!

用戶交互:React組件被認為自己是一個有限狀態機。與用戶交互,改變自己的狀態(state)。算法根據這些狀態,render算法現計算出合適的數據集呈現給用戶。這樣做的好處是設計范式高度一致。

UI布局,可能需要用到react-router,或者自己寫框架。這一塊還未研究。

1.3 對比其它方案

React對比其它方案,突出優點是正交化、輕、約定性、務實:

正交:對比Vue, Angular更正交化,它沒有template,大的component就是template。

輕:對比abobe flex或其它的UI系統是輕,沒有復雜的UI OO體系,這也是說明React只是一個目標UI體系的粘合層。

約定性:約定大于Java儀式感,這也是自Rails之后在風潮。如pure render,最小化無狀態state。

務實:通過JSX來組織表達控件的樹形結構,用this.props來傳遞數據

1. 4 挑戰

React是數據驅動式的UI component體系,是一個開放的數據依賴式,非自閉OO對象。它會有以下挑戰

render方法可能很大,component顯示邏輯是一次性在render里實現的。這里往往有兩部分邏輯實現,初次數據綁定,與用戶交互之后的算法。

render出一個ReactElement樹,但這個樹中的一些組件、UI元素因為計算被前移了,這會導致這個樹看起來不太完整,進而不太直觀。

雖然可以分解成小的component,構建大的Component可能是個挑戰,因為所有邏輯都依賴于外部數據,而外部數據相對不穩定,組件失去了自我邊界的保護,非自閉。

當交互復雜,組件的state也會越來越大,render全局算法會越來越難寫。

把子組件的行為傳上來也是一件不顯化的事,往往需要把父組件的一個函數作為回調傳給子組件。

大組件往往有多個Page,這幾個Page如何交換數據是個很大的挑戰

2. 談談對Redux的理解 2. 1 獨特性

一個數據層的framework,類似于Baobab。比其好的一點,引入middleware體系,有幾個現成的插件redux-thunk, redux-promise,不用但心異步請求的事。雖然說靈活、獨立很重要,但全局設計也是 讓人放心去用,而不用擔心功能缺失和其它風險。

應用了FP中數據不可變性(immutable),這讓追蹤數據改變過程有很大提升。也就是其宣揚的時間旅行。這對復雜問題定位是有好處的。

樹形化數據存儲,reducer的返回即是其新建,更新、刪除過程,樹形結構不需要預先定義。同時,reducer也是純函數,與reactor的render是純函數呼應。

強約束(約定),增加了內聚合性。Flux中的action, dispatcher, store比較散,在分層架構是需要的,但內聚性不佳,出現java的儀式感。而redux是數據層很清晰,一個store,更新則dispatch到action,前半段自己想怎么搞就怎么搞(middleware),后半段reducer。reducer約束是不要改oldState,返回newStatew,做到immutable。

不一樣的action:Redux中的action會切得很細,一個傳統的Action被切成了三個Action:Loading, GetSuccess, GetError。所以,從這個方面來看Action服務于UI,而非業務邏輯單元。

Redux大量應用FP,經常遇到FP中的curry, trund, promise這些概念,學習成本較高。在middleware層實現,對沒有FP經驗的人講不友好。

2.2 置Redux于上下文中

Redux是一個比較薄的數據層。同時,把View同步刷新也做了(redux-react)。

在傳統MVC中,還是有一個controller來做業務邏輯。但Redux硬生生的把一個controller切成二部分:action, reducer。

理論上,Redux還可以把React組件中的stat的存儲也拿過來,比如用戶搜索的名稱。這樣,就可以把過濾算法放到selector中去。但這樣好處并不是很大。

2.3 與其它方案對比

與Baobab對比,兩者都是數據管理框架,Baobab提供cursor來方便你對很深層的數據結構進行update。而redux是通過selector函數來做,這種方法會比較晦澀。但比Baobab好的地方,做數據fetch可以通過Redux的middleware來完成。

與Rails的controller, ActionRecord相比,Redux更多是一種約定,不提供路由級的controller,不提供數據訪問cursor。

接口不超過10個,代碼也非常少,但是與之前的MVC框架完全不同。可能最大的問題是沒有和react-route打通,在工程化時讓人迷茫。?

2.4 挑戰

Redux應用最大的挑戰更多來自設計層面,如何設計action,設計state樹形結構。我們只能通過非常少的線索(FP架構思想)去做,這對沒有FP經驗的團隊是一個大挑戰。

通過selector函數從stat樹里取數據比較晦澀,并且這個selector里的代碼認為是業務邏輯,多帶帶放在selector,業務上不內聚。

middleware層設計:action是一個意圖(intent),發送給middleware,讓其來實現此意圖。但這樣做,action比有兩義性,一會兒是對象,一會兒是函數。同時FP編程侵入性太大。

沒有與Route結合起來設計,讓人很不放心,也不知道如何在不同路由下來做數據與組件的connect。

3. 總結

react + redux是一種典型的FP編程范式實現,而其它框架大多是OO范式。是否選用react+redux開發,需要看是否對FP有掌握或者有一定的架構能力。但多帶帶用react則沒有這種要求,當個view來用。

3.1 FP vs OO
FP優缺點

FP的好處是沒有OO的復雜儀式感,是沿著數據結構+算法的思路進行抽象和結構化。如果頂層設計做好,代碼復用度極高,代碼量少。比如要生成一顆樹我用迭歸算法直接生成,而OO的人往往會用一個Composite模式去定義一個晦澀的類接口。

FP的缺點也是也是面向過程編程的缺點,算法與數據全局化、并且互相耦合,這往往會導致一個強耦合的系統。如果沒有做好頂層設計,是難以演進的。

通過約定和全局的理解,可以減少FP的一些缺點。“約定大于配置”也是框架的主要發展方向。?

OO優缺點

OO的好處是分而治之,增量演進。同時有自閉性,語義比較清晰。

缺點是在表達一些算法時,反而是很困難的。如command模式實現歷史回滾就挺麻煩。也這是四人幫的設計模式大多比較難以理解的原因。另外,OO一直有一個對算法復用的問題,ruby語言解決比較好,用mixin很自然。而像C++就用多繼承和泛型,個人感覺并不是最好的。?

3.2 建議

有FP經驗的或者架構能力比較強,團隊人員比較少、能力強,較強適合用react+redux。不然用react+angluar, 或直接用vue。

過度的OO,搞太多java儀式感確實沒有必要。通過架構設計,FP在生產力有著一定的優勢。同時對付復雜系統,能更好調測、定位問題。在新時代下,值得嘗試。

轉載自:http://www.jianshu.com/p/0e42...

個人建了前端學習群,旨在一起學習前端。純凈、純粹技術討論,非前端人員勿擾!入群加我微信:iamaixiaoxiao。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/86886.html

相關文章

  • react-redux

    摘要:主要用于構建,被認為是中的視圖。高效通過對的模擬,最大限度地減少與的交互。也就是說,用戶負責視覺層,狀態管理則是全部交給它。該回調函數必須返回一個純對象,這個對象會與組件的合并。 React 定義: React 是一個用于構建用戶界面的 JAVASCRIPT 庫。React主要用于構建UI,React 被認為是 MVC 中的 V(視圖)。 特點: 聲明式設計 ?React采用聲明范式...

    sanyang 評論0 收藏0
  • React為什么需要Flux-like

    摘要:的關鍵構成梳理了一下,需要配合的庫去使用,是因為要解決通信問題。還有各個事件之間,有可能存在依賴關系,事件后,也觸發。相比于傳統的事件系統,融入了不少的思想。中,將會是最大的門檻之一。 從學習React到現在的一點感受 我覺得應該有不少同學和我一樣,上來學React,覺得甚是驚艷,看著看著,發現facebook 安利了一個flux,圖畫的巨復雜,然后各種例子都有用這個東西,沒辦法,硬著...

    wangtdgoodluck 評論0 收藏0
  • React組件設計實踐總結05 - 狀態管理

    摘要:要求通過要求數據變更函數使用裝飾或放在函數中,目的就是讓狀態的變更根據可預測性單向數據流。同一份數據需要響應到多個視圖,且被多個視圖進行變更需要維護全局狀態,并在他們變動時響應到視圖數據流變得復雜,組件本身已經無法駕馭。今天是 520,這是本系列最后一篇文章,主要涵蓋 React 狀態管理的相關方案。 前幾篇文章在掘金首發基本石沉大海, 沒什么閱讀量. 可能是文章篇幅太長了?掘金值太低了? ...

    ideaa 評論0 收藏0
  • Redux入門0x101: 簡介及`redux`簡單實現

    摘要:在我看來它們的關系不會比共用開頭更深了,所以我就重新開了一個頭,但其實是基于前面寫的資源中文文檔英文文檔官方視頻學習歷程當初為了學習,看了許多的材料,中途曾經放棄兩次,但是最后還是勇敢的拿起了它,現在終于勉強弄懂。 0x000 概述 這一章開始講redux,其實是承接前面的react,但其實作為一個框架來說,redux和react并沒有太多的關系,本身是獨立存在的。在我看來它們的關系不...

    ssshooter 評論0 收藏0
  • 我厭倦了 Redux,那就造個輪子 Rectx:第三集

    摘要:呵呵,你沒想到吧,這玩意兒竟然有第三集我靠,我自己都沒想到,讓我們悄悄的回顧一下前兩集完全沒想到,竟然會有第二集我厭倦了,那就造個輪子第二集痛點分析第一集在這里我厭倦了,那就造個輪子算了,我都懶得寫了,自己看吧,當然不看也無所謂,正式開始。 倉庫:215566435/rectx 前言 麻煩快去我的倉庫里面噴: 老子學不動了,求不要更新。 呵呵,你沒想到吧,這玩意兒竟然有第三集!我靠,我...

    adam1q84 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<