首頁  >  文章  >  web前端  >  redux必須搭配react嗎

redux必須搭配react嗎

藏色散人
藏色散人原創
2020-12-22 09:24:111767瀏覽

redux不是必須搭配react的,除了支援React外還支援其他的UI框架;而且redux並不是適合所有專案所有應用的;在react中,能不用redux就不用redux。

redux必須搭配react嗎

推薦:《react影片教學

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

在開始今天的主題之前,有幾個點我需要強調一下

react的state和redux的state根本是完全不沾邊的兩個東西,切記不要混為一談。 react的state是存在於類別元件中的一個存放自身變數的屬性,redux的state整個應用程式的store中的某一個namespace下的狀態。二者沒有任何關係。

redux是一個獨立於react的,你可以選擇使用或選擇不適用,如果您不是使用的基於redux的腳手架,那麼想使用redux您是需要單獨引用的。 react包中並沒有redux。

假如您的應用程式中要使用redux,您是需要將react和redux關聯起來的,這裡有一個套件叫做react-redux,是用來關聯react和redux的,其中有一個高階函數叫connect,它接受兩個方法,mapStateToProps和mapDispatchToProps就是這兩個方法將redux的state注入到了react的props中。

上面是帶大家回顧redux的一些基本知識點,接下來我們進入主題。

redux的使用場景

如果您的React應用程式中狀態十分多,難以維護的時候,這個時候redux是個不錯的選擇。 (這裡所說的狀態就是react的state)

如果您需要資料共享,也就是多個react元件需要用同一個資料來源。

如果您需要一些全域性的狀態控制,例如應用程式中的目前登入人,我們說不定會在哪個元件中使用登入人資訊,如果我們將它註冊到全域redux中,那麼我們就無需關係哪個元件要用了,我們用的時候直接從全域redux中取就行

某元件的業務邏輯過於複雜,在react元件中處理這些資料太過繁瑣,我們可以考慮將部分邏輯拆分到redux中。

使用redux可以將資料和UI分離開,如果您為了實現這樣的效果,您可以嘗試使用redux.

我們為什麼要減少redux的使用

看過阮一峰大哥部落格的同學一定看過這幾句話

如果你不知道是否需要Redux,那就是不需要它。

只有遇到 React 實在解決不了的問題,你才需要 Redux 。

所以redux並不是適合所有專案所有應用的。

使用redux需要創建很多模板程式碼,會讓state的更新變得十分複雜,這一點誰用誰知道,哈哈。

使用過多的redux會讓應用程式失去彈性

Redux 帶來了函數式程式設計、不可變性想法等等,為了配合這些概念,開發者必須要寫很多「模式程式碼(boilerplate)”,繁瑣以及重複是開發者不願意容忍的。當然也有很多hack 旨在減少boilerplate,但目前階段,可以說Redux 天生就附著繁瑣;

  • 使用Redux,那麼你的應用就要用objects 或arrays 描述狀態;OMG !

  • 使用 Redux,那麼你的應用程式就要使用 plain objects 即 actions ,來描述變化;OMG!

  • 使用 Redux,那麼你的應用程式就要使用純函數去處理變化;OMG!

應用程式中,很多狀態都要抽像到 store,那麼何時使用 local states 何時會接取 Redux store?不能痛痛快快地寫業務,一個變化就要對應編寫action(action creator),reducer 等等;

和響應式結合函數式的Mobx 相比,程式設計體驗「打折扣」

#以上是引用了網友的一段話,可見redux的過度使用時存在很多弊端的,我這裡就不一一羅列他的弊端了。有興趣的同學可以去自己搜一下,總是,我認為能不用redux就不用redux

讀到這裡,我想解決了一些讀者心中的疑問「我們什麼時候用react的state什麼時候用redux的state?」答案就很明確了。

redux畢竟是一個比較成功的框架,其中的資料流也是很經典,解決了不少難題,任何東西都有利弊,我們只要做好權衡,相信我們可以寫出更加優秀的應用。

以上是redux必須搭配react嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn