2016-05-21 16 views
0

大家好。如何處理Redux中的列表和單個元素的不同api

我有以下問題。 想象一下,我們有一個代表設備列表的應用程序 ,用戶也可以訪問單個設備的卡並查看關於它的全部信息。

我們的API如下所示:

對於列表:

[ { name: 'Device 1', id: 1 }, { name: 'Device 2', id: 2 }, { name: 'Device 3', id: 3 }, { name: 'Device 4', id: 4 } ]

對於單個設備:

{ name: 'Device 1', id: '1', elements: [{ type: 'switch', name: 'socket' }, { type: 'multilevel', name: 'bulb' }], room: { name: 'living', id: 2 } }

正如您所看到的,設備列表的api更輕量級。我們不想讓更多的數據庫請求列表,也不想強制用戶獲取不必要的數據列表。

現在,想象一下,在設備卡用戶可以編輯設備的「名稱」,例如。

我應該如何處理我的狀態? 我應該將這個狀態存儲在兩個地方嗎?

或者我應該處理我的狀態樹是這樣的: 應用程序讀取列表,每一個設備對象我標記爲「完成:假」

{ '1': { id: 1, name: 'Device 1', complete: false }, '2': { id: 2, name: 'Device 2', complete: false } }

但是,當用戶那張卡片,我們獲取整個設備數據,然後使用'complete'標誌等於'true'的列表對象進行賦值。 在兩個地方處理狀態的問題都消失了。

任何幫助將不勝感激。

回答

0

我寧願不在商店中有重複的數據,因爲這會導致所有常見問題(如您已經提到過的)。所以我的首選模型將是第二個模型,包含所有列表條目的列表或地圖。無論您選擇列表還是地圖,都取決於您擁有哪些要求,例如固定的順序,這是地圖無法輕易實現的。

我不會爲完整性引入標誌,而是讓對象數據自行確定。在你的情況下,如果!entry.elements && !entry.room,那麼該對象還沒有完成,你需要獲取附加數據並將其添加到對象。我不會有這個標誌,因爲這個標誌是多餘的信息,可能會再次失去同步。

+0

謝謝你的幫助。它現在清楚了! – user6364326

相關問題