搜尋
首頁web前端js教程redux和react有啥差別

redux和react有啥差別

Dec 03, 2020 am 10:40 AM
reactredux

redux和react的差異有:1、redux是一個JavaScript狀態容器,而react是Facebook推出的一個用來建構使用者介面的JavaScript函式庫;2、redux主要提供狀態管理,而react主要用於建構UI等等。

redux和react有啥差別

本教學操作環境:windows7系統、React17版,DELL G3電腦,此方法適用於所有品牌電腦。

推薦:《javascript基礎教學#》

#redux

redux是一個JavaScript狀態容器,主要提供狀態管理。可以運行於服務端,客戶端,原生應用程式。除了支援React外還支援其他的UI框架,體積小,只有2kb。當要與React一起使用的時候,可以使用react-redux插件來進一步提升我們的開發體驗。

可以透過呼叫對應的API或是以對應的機制改變這個容器中的資料就可以了,其他元件可以透過主動重新從容器中取得新資料來重新渲染。

此外這個容器還需支援發布訂閱機制,也就是當某個資料改變了,關心這個資料的元件就產即會得到通知。

react

react是 Facebook 推出的一個用來建立使用者介面的 JavaScript 函式庫。 React主要用於建立UI,許多人認為 React 是 MVC 中的 V(視圖)。 React 擁有較高的效能,程式碼邏輯非常簡單,越來越多的人開始關注和使用它。

React 是一個為資料提供渲染為 HTML 視圖的開源 JavaScript 函式庫。 React 視圖通常採用包含以自訂 HTML 標記規定的其他元件的元件渲染。 React 為程式設計師提供了一個子元件不能直接影響外層元件的模型,資料改變時對 HTML 文件的有效更新,和現代單頁應用程式中元件之間乾淨的分離。

學會用自己的思想來理解React和Redux;不能光聽別人描述名詞,理解起來是很困難的。

從需求出發,看看使用React需要什麼:

1、React有props和state: props意味著父級分發下來的屬性,state意味著元件內部可以自行管理的狀態,整個React沒有資料向上回溯的能力,也就是說資料只能單向向下分發,或是自行內部消化。

理解這個是理解React和Redux的前提。

2、一般建置的React元件內部可能是一個完整的應用,它自己運作良好,你可以透過屬性作為API控制它。但更多的時候發現React根本無法讓兩個元件互相交流,使用對方的資料。

然後這時候不透過DOM溝通(也就是React體制內)解決的唯一方法就是提升state,將state放到共有的父元件中來管理,再作為props分發回子元件。

3、子元件改變父元件state的辦法只能是透過onClick觸發父元件宣告好的回調,也就是父元件提前宣告好函數或方法作為契約描述自己的state會如何變化,再將它同樣作為屬性交給子組件使用。

這樣就出現了一個模式:資料總是單向從頂層向下分發的,但是只有子元件回呼在概念上可以回到state頂層影響資料。這樣state一定程度上是響應式的。

4、為了面對所有可能的擴充問題,最容易想到的辦法就是把所有state集中放到所有元件頂層,然後分發給所有元件。

5. 為了有更好的state管理,需要一個函式庫來作為更專業的頂層state分發給所有React應用,這就是Redux。讓我們回來看看重現`上面結構的需求:

需要回呼通知state (等同於回呼參數) -> action

需要根據回呼處理(等同於父級方法) -> reducer

需要state (等同於總狀態) -> store

#對Redux來說只有這三個要素:

#action是純粹聲明式的資料結構,只提供事件的所有要素,不提供邏輯。

reducer是一個匹配函數,action的發送是全局的:所有的reducer都可以捕捉到並匹配與自己相關與否,相關就拿走action中的要素進行邏輯處理,修改store中的狀態,不相關就不對state做處理原樣回傳。

store負責儲存狀態並且可以被react api回調,發布action.

當然一般不會直接把兩個函式庫拿來用,還有一個binding叫react-redux, 提供一個Provider和connect。很多人其實看懂了redux卡在這裡。

Provider是一個普通元件,可以作為頂層app的分發點,它只需要store屬性就可以了。它會將state分發給所有被connect的元件,不管它在哪裡,嵌套多少層。

connect是真正的重點,它是一個科里化函數,意思是先接受兩個參數(資料綁定mapStateToProps和事件綁定mapDispatchToProps),再接受一個參數(將要綁定的元件本身):

mapStateToProps:建構好Redux系統的時候,它會被自動初始化,但是你的React元件並不知道它的存在,因此你需要分類出你需要的Redux狀態,所以你需要綁定一個函數,它的參數是state,簡單回傳你關心的幾個值。

mapDispatchToProps:宣告好的action當作回呼,也可以被注入到元件裡,就是透過這個函數,它的參數是dispatch,透過redux的輔助方法bindActionCreator綁定所有action以及參數的dispatch,就可以作為屬性在元件裡面作為函數簡單使用了,不需要手動dispatch。這個mapDispatchToProps是可選的,如果不傳這個參數redux會簡單把dispatch當作屬性注入給元件,可以手動當做store.dispatch使用。

這也是為什麼要科里化的原因。

做好以上流程Redux和React就可以工作了。

簡單來說就是:

1.頂層分發狀態,讓React元件被動地渲染。

2.監聽事件,事件有權利回到所有狀態頂層影響狀態。

總結:

react需要一個管理狀態的管理者,redux就扮演這個角色進行頂層分發狀態,改變react元件的渲染。

以上是redux和react有啥差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JavaScript在行動中:現實世界中的示例和項目JavaScript在行動中:現實世界中的示例和項目Apr 19, 2025 am 12:13 AM

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

JavaScript和Web:核心功能和用例JavaScript和Web:核心功能和用例Apr 18, 2025 am 12:19 AM

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

了解JavaScript引擎:實施詳細信息了解JavaScript引擎:實施詳細信息Apr 17, 2025 am 12:05 AM

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python vs. JavaScript:學習曲線和易用性Python vs. JavaScript:學習曲線和易用性Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Python vs. JavaScript:社區,圖書館和資源Python vs. JavaScript:社區,圖書館和資源Apr 15, 2025 am 12:16 AM

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C到JavaScript:所有工作方式從C/C到JavaScript:所有工作方式Apr 14, 2025 am 12:05 AM

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

JavaScript引擎:比較實施JavaScript引擎:比較實施Apr 13, 2025 am 12:05 AM

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

超越瀏覽器:現實世界中的JavaScript超越瀏覽器:現實世界中的JavaScriptApr 12, 2025 am 12:06 AM

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具