2016-11-13 63 views
4

當使用Redux時,商店應該是真實的唯一來源,並且沒有冗餘。假設商店的一部分代表了有名字和年齡的人。在傳統的面向對象編程的人類可能是這個樣子:哪裏處理Redux的計算屬性?

class Person { 
    constructor(first, last, birthday) { 
     this.first = first; 
     this.last = last; 
     this.birthday = birthday; 
    get_fullname() { // ... //} 
    get_age() { // ... //} 
} 

然而,方法不允許在終極版存儲對象。那麼,這些「方法」應該在哪裏實施呢?

回答

2

有兩種方式:

  1. 在減速。

    不知道你在哪裏得到'商店無冗餘'規則。將計算結果與商店中的源數據一起保存是完全有效的(雖然在連接名稱和姓氏這種簡單情況下可能不是最佳方法)

  2. 在選擇器中。

    選擇器是用於從存儲中獲取特定子分支的函數。他們也可以在返回之前對它們進行計算。 See this chapter in redux' documentation for some examples

    這個,在需要的地方有一些備忘錄,我想是兩個更好的解決方案。

3

你可以計算這種點播狀態裏面你connect功能與選擇

function getFullName(state) { 
    return `${state.first} ${state.last}`; 
} 

function mapStateToProps(state) { 
    return { 
    fullName: getFullName(state) 
    }; 
} 

connect(mapStateToProps)(MyComponent); 

退房Reselect,被設計爲與終極版很好地工作選擇庫。

技術上沒有規則說你不能在你的reducer中處理它,然後將預先計算好的狀態存儲在你的商店中,但是你必須記住每次依賴屬性改變時更新它。

一般你,如果你保持冗餘數據你的商店,並使用選擇器允許你寫,你的組件之間共享按需計算,當你需要他們用簡單的代碼結束。