2016-10-17 27 views
0

我正在尋找創建一個通用的方式來存儲isFetching實體/數據在REDX。目前我使用normalizr並將所有實體數據存儲在實體哈希中。例如我應該如何在我的redux商店中存儲isFetching/isLoading數據?

{ 
    people: { ... }, 
    orders: { ... } 
} 

我在每個實體思維defining a property(即人,訂單...)對象指定數據是否正被取出。唯一的問題是,如果你做Object.keys之類的事情,你會在你的數組中返回一個ids + isFetching列表。爲了克服這個問題,我想將屬性設置爲不可枚舉。

我的數據相當複雜,我不只有2個實體,我只是簡單的例子。我正在尋找一種可以在我的代碼庫中長期生存的解決方案。

這是一個很好的解決方案嗎?我不想創建一個新的對象來存儲元數據(儘管這是一個潛在的解決方案)。有更好還是更常見的方法?

我知道這是稍有自以爲是,但終極版發出指引向我指出計算器...

注意我所知道的有Object.defineProperty兼容性問題。這是一個內部應用程序,每個人都使用最新版本的Chrome。

UPDATE

在終極版店內

let initialState = { 
    entities: { 
    customers: null, 
    orders: null 
    } 
}; 

Object.defineProperty(initialState.entities.customers, 
    'isFetching', 
    { 
    value: false, 
    writable: true, 
    enumerable: false 
    }); 

Object.defineProperty(initialState.entities.orders, 
    'isFetching', 
    { 
    value: false, 
    writable: true, 
    enumerable: false 
    }); 


export default initialState; 

回答

1

我覺得定義不可枚舉的屬性將讓您的代碼庫更難維護潛力的實現,因爲這樣一個事實屬性不枚舉,在調試時大部分時間是隱藏的。

您可以按照normalizr中的示例進行操作,並將元數據放在entities旁邊。例如:

{ 
    customers: { 
    entities: {/** contains your normalized customer list*/}, 
    isFetching: false 
    }, 
    orders: { 
    entities: {/** contains your normalized order list*/}, 
    isFetching: false 
    } 
} 

這也將允許將來進一步擴展元數據。

+0

目前我的商店裏有'entities.people'。你是否建議將人們轉移到根級別,即顛倒我存儲實體的方式?從長遠來看,它可能會更好,但將我的實體分組在一個部分很好。 –

+0

對不起,沒有看到。但我的回答更多的是元數據(imho)應該作爲列表的兄弟存儲。除此之外,扁平化的商店狀態總是很好。 「實體」可能不是最好的域,因爲它可能意味着所有的東西(不是從REST端點到實體的所有東西?)。 *編輯:更新我的答案。* –

+0

你好,我正在使用redux文檔中給出的技術。你有實體的事實不能逃脫。我確實想把我所有的獨特數據以某種方式組合在一起。然後我使用選擇器來獲得更具體的數據 - 過濾的數據等... https://github.com/reactjs/redux/blob/master/examples/real-world/src/reducers/index.js –

相關問題