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