2017-08-29 41 views
0

redux框架/庫中是否存在標準實體模式?Redux中的實體模式?

我是相當新的反應/ redux,我正在建立一個簡單的餅圖應用程序,您可以在其中添加餅圖切片並更改餅圖名稱。 (我使用的是不可變的js庫)

在我減速的代碼看起來真的很討厭和笨重:

switch (action.type) { 

    case 'CREATE_SLICE': 

    var myList = imState.getIn(['app', 'pie', 'data']) 
    myList = myList.toJS(); 
    myList.push(action.slice); 

    var v = Immutable.fromJS(myList) 

    imState = imState.setIn(['app', 'pie', 'data'], v) 
    break; 

    case 'CHANGE_NAME': 
    var newName = action.newName; 

    imState = imState.setIn(['app', 'pie', 'name'], newName) 

    break; 

所以我決定重構爲一個類型的實體類的這樣的:

class PieChart { 

    static get path() { 
    return ['app', 'pie']; 
    } 

    static createSlice(imState, action) { 

    var myList = imState.getIn([...this.path, 'data']) 
    myList = myList.toJS(); 
    myList.push(action); 

    var v = Immutable.fromJS(myList) 

    imState = imState.setIn([...this.path, 'data'], v) 

    return imState; 
    } 

    static changeName(imState, newName) { 
    imState = imState.setIn([...this.path, 'name'], newName) 

    return imState; 
    } 
} 

這個類不包含狀態。它只獲取通過函數傳遞給它的狀態對象。

路徑函數包含狀態對象中的路徑,該路徑與該類所關注的實體相關。

我的問題是,這是一種常見的模式?這是封裝實體數據還是功能的適當方式?

+1

你的重構如何完全取決於你。只要這些方法中的每一個都是純粹的方法,那並不重要。我個人認爲創建一個班級沒有任何好處。但是創建函數不是問題。 –

+0

^我第二個Callum。如果你的類只有靜態方法,爲什麼不把它們作爲獨立的實用程序函數導出?現在轉到您的問題 - 是的,有一個小的實體庫來分析數據會很有用。但我不知道任何標準庫,因爲來自後端的數據差別很大。 – Mihir

回答

0

這通常被認爲是反模式。 Redux鼓勵使用普通數據,並使用普通函數來操作數據。您不需要將這些數據封裝到實體類中就可以使用它。