譯 我們應該在何時使用 Redux

2021-08-19 04:31:59 字數 3205 閱讀 5458

redux是乙個專注於應用狀態管理的庫, 它是react應用程式中使用的常用的乙個工具庫。

過早優化是萬惡之源。—唐納德·克努特

這是我們在構建程式是乙個準則,這也是為什麼我們一開始在構建最新的react應用程式時,我們選擇使用react本地元件狀態開始管理我們的應用程式狀態。

新的 react 應用程式前幾周執行得非常好,但是隨著版本的迭代,我們開始發現程式管理的難度在不斷上公升!

day1

我們開始使用react本地元件狀態來管理應用程式。

react 使用單向資料流,這意味著父元件把自身的狀態作為屬性傳遞給子元件。

我們新增了更多的功能,一些元件需要共享他們的狀態(state),但是它們與其他元件並非父元件和子元件的關係。

不過沒關係,我們通過了「提公升狀態」來解決了這個問題。

這意味著我們將狀態(和改變這個狀態的函式)提公升到最接近的父元件(container component)。

我們將這些函式繫結到容器元件,並將它們作為屬性向下傳遞。

這意味著子元件可以觸發其父元件中的狀態更改,這將更新樹中的所有其他元件

然而,隨著新增了更多的功能和元件,我們發現元件之間的互動實在太多了,為了管理好元件之間的state,導致了某些元件的**變得非常臃腫。

我們只能看著我們的**庫越來越像一碗義大利面,**混亂之極。

正如你所看到的,狀態在應用程式中更新和分散的方式變得越來越複雜。

1. 乙個元件需要共享它的狀態給好幾個元件

2. 乙個元件的狀態改變發生的屬性(props)傳遞,需要橫過好幾個元件

3. 程式越來越難進行debug

如果開始遇到上述某些問題,就意味著可能應該使用redux了。

這種元件間的通訊地獄,管理起來可不僅僅是痛苦。。。。

由於個人覺得阮一峰老師關於 redux 入門教程 裡面的概念講述更具體形象,所以這裡我套用了阮一峰老師的部分文章內容

首先,並非所有的react應用程式都需要使用redux的。如果你不確定是否使用rudex,那麼你就是不需要的。

如果你遇到了無法解決的難題(比方說我們剛才遇到的難題),那麼rudex可能就是你需要的東西。

redux 的設計思想很簡單,就兩句話:

1. 整個系統是乙個狀態機,檢視與狀態是一一對應的

2. 所有的狀態,儲存在乙個物件裡面

這裡簡單介紹一下rudex的概念:

store

store就是儲存應用元件狀態(state)資料的地方,你可以把它看成乙個容器。整個應用只能有乙個store

state

store物件包含所有資料。如果想得到某個時點的資料,就要對store生成快照。這種時點的資料集合,就叫做state

當前時刻的state,可以通過store.getstate()拿到。

redux規定, 乙個state對應乙個view。只要state相同,view就相同。

你知道state,就知道view是什麼樣,反之亦然。

action

state的變化,會導致view的變化。但是,使用者接觸不到state,只能接觸到view

所以,state的變化必須是view導致的。

action就是view發出的通知,表示state應該要發生變化了。

action是乙個物件,其中的type屬性是必須的,表示action的名稱,其他屬性可以自由設定。

reducer

store收到action以後,必須給出乙個新的state,這樣view才會發生變化。

這種state的計算過程就叫做reducer

reducer是乙個函式,它接受action和當前state作為引數,返回乙個新的state

也由於reducer是純函式,就可以保證同樣的state,必定得到同樣的view,也就可以保證頁面的重新整理。

使用redux我們每派發乙個動作,這會觸發我們的reducer功能,從而更新我們的store,從而讓view實現重新整理。現在,我們的應用程式看起來就是下面這個樣子了:

為什麼應該在 v for 中使用 key?

引用 vue 官方文件的原話 vue 會盡可能高效地渲染元素,通常會復用已有元素而不是從頭開始渲染。這樣容易導致一些問題。因為類似 這樣的元素都有乙個internal state 儲存著元素的值,而在元素復用時,這個值是會得到保留的。我們來看乙個登陸方式切換的例子 v if isuser login...

中國應該在國內採取行動以抵制OOXML

儘管中國在iso投了反對票,但是ooxml最終還是通過於各國代表的商討且不排除有不正當接觸,通過的表決,成為國際標準。但是,或許我們國家,應該在國內更多地採取一些行動。正如以前,儘管odf是國際標準,但是仍然沒有競爭過微軟的文件。在微軟文件更新換代的時候,我認為中國應該採取措施,讓本來就該被替代的o...

人應該在早年播下成功的種子

人生的第一步很重要,如果第一步走錯了,就會永遠的錯下去。南懷瑾 有些人很早就能發現生命的意義和生存的使命,從而可以找到乙份適當的工作,幫助自己完成使命。有些人卻沒有這樣幸運,他們需要很多年的時間,經過許多困難和挑戰後,才明白自己生命的意義和使命 有些人甚至終其一生都是在迷惘困惑中度過。乙個人,最遲在...