2017-07-06 281 views
2

我在想最近學習reactjs,希望有人能幫助我理解使用redux的情況,因爲我對它的複雜邏輯感到困惑。使用redux有什麼好處?

首先,我已經使用了angular2 +一段時間了,所以我也試圖從我已經知道的東西中獲得這個想法。

我見過很多redux的例子,但我不明白使用動作和分派的好處。

使用redux商店使用動作和縮減器而不是像這樣使用類和主題有什麼好處?

class Store{ 
    subject = new BehaviorSubject(0); 
    get value(){ 
     return this.subject.getValue(); 
    } 
    inc(){ 
     this.subject.next(this.subject.value+1); 
    } 
    dec(){ 
     this.subject.next(this.subject.value-1); 
    } 
    clear(){ 
     this.subject.next(0); 
    } 
} 

class Demo extends React.Component<{}, {}>{ 
    store = new Store(); 
    componentWillMount(){ 
     this.store.subject.subscribe(_ => this.forceUpdate()) 
    } 
    render(){ 
     const value = this.store.value; 
     const { inc, dec, clear } = this.store; 
     const store = this.store; 
     return (
      <div> 
       <span>{`current value is ${value}`}</span> 
       <button onClick={inc.bind(store)}>INC</button> 
       <button onClick={dec.bind(store)}>DEC</button> 
       <button onClick={clear.bind(store)}>CLEAR</button> 
      </div> 
     ); 
    } 
} 
+0

您是否得出結論,特別是關於Angular與Smart/DumbComponents或Services一起使用?據我瞭解,redux但Angular的好處可以做到這一點。我沒有看到這一點,也許你現在知道更好.. – hogan

+0

我認爲至少對於一個個人項目來說,redux的好處是微乎其微的。我相信這對調試有用,但除此之外,我認爲這對於涉及少數人的項目來說是一種矯枉過正。 – darwinsenior

回答

1

調度比傳統方法調用操作的好處:

  1. 記錄,因爲所有的動作可以很容易地記錄下來,你總能看到發生了什麼事情的應用程序。對於那些對我來說是殺手級功能的大型應用程序。

  2. 預處理 - 您可以使用redux中間件對您的操作進行各種花哨的預處理 - 最典型的是以某種方式自動執行xhr請求。

  3. 由於動作是可序列化的,因此實現諸如「撤消」之類的功能要容易得多,但這並不經常需要。

關於redurs-redurs碰巧是更新不可變狀態的最簡潔方法。因此,減速器與可變與不可變的商店狀態無關,這是一個相當虔誠的問題。我會說,給定足夠的紀律可變狀態以及不變的狀態。


關於預處理,基本上你可以有一段代碼看起來對系統中所有發生的事情,做的東西,如果一個動作符合某些標準的行動。

例如:它們具有{ url, params }屬性將導致成由{ url }指定的後端API的請求並轉換成新的行動這將具有代替URL &的{ responseJson }屬性

  • 所有動作params
  • 所有包含{ debounce }屬性的操作都會被消除,所以如果您連續發出一打這樣的動作,只有最後一個動作會被實際處理。
  • 所有具有{ alert }屬性的動作都會向用戶顯示一個小的敬酒警報。
  • 等等等等。基本上,調度行爲迫使您通過一箇中心位置將應用程序中所有最重要的事情都傳遞出去,這樣可以以任何您能想到的方式處理這些行爲。
+0

能否詳細說一下第二點謝謝! – darwinsenior

+0

剛剛添加了幾個例子。 –

+0

我明白了。但我仍然不確定它何時有益。在rxjs中,debounce可以通過switchMap來實現,{url,params}可以只使用一張地圖,我認爲對於一個警戒情況來說,調用兩個動作並不比打電話更好。唯一的區別似乎是所有的東西都和redux一起使用,但是不會引入全局變量,這可能是一個壞主意? – darwinsenior