我試圖更好地理解由Maxime給這個question的答案。我的代表不夠高,不能評論那裏的答案,所以我會在這裏問一個新問題。這個ngrx選擇器在做什麼?
關於設置標準化狀態的部分很有意義。然後他繼續談論你將如何創建一個選擇器,他的答案的這一部分在下面引用,並顯示他的代碼塊。
在你的邏輯或視圖(例如Angular)中,你需要你的嵌套結構,這樣你可以迭代你的數組,因此,你不想迭代一個字符串數組。相反,您需要actualContent:ActualContent [] ;.
爲此,您創建一個選擇器。每當您的商店發生變化時,您的選擇器都會啓動並生成新的「查看」原始數據。
// assuming that you can blogContentsState and actualContentsState from your store
const getBlogContents = (blogContentsState, actualContentsState) =>
blogContentsState
.allIds
.map(blogContentId => ({
...blogContentsState.byId[blogContentId],
actualContent: blogContentsState
.byId[blogContentId]
.actualContentIds
.map(actualContentId => actualContentsState.byId[actualContentId])
}));
我的問題是,無論是否仍有的BlogContent
與actualContent
陣列的類型定義嵌套?
export interface BlogContent {
id: string;
header: string;
tags: string[];
title: string;
actualContent: ActualContent[]; <------ NESTED
}
我不太明白什麼選擇getBlogContents
在做什麼,如何做到這一點的要與actualContents的嵌套列表中顯示blogContents組件一起使用,可這一點更詳細的解釋?
嗨sawcode我很高興看到你已經看着披薩同步:)!是的,我知道我不會使用重新選擇進入pizza-sync,但我打算一旦它變得更加穩定就將它升級到ngrx v4(我已經在這次重大升級中遇到了一些錯誤,並且我正在等待一些問題關閉他們的github)。一旦沒事的話,我會做一個重構,然後我會使用ngrx v4提供的createSelector,它與重做相同:) – Maxime
感謝您公開您的項目。我還沒有嘗試過ngrx v4,但在試用之前知道我應該等待更長時間會很有用。 – seescode
是的,的確,我並不是唯一注意到ngrx v4和AOT之間不兼容的人。如果你不使用AOT編譯(這太糟糕了),那麼你可能會去做。另外,如果您有一個應用程序要遷移到ngrx v4,則可以啓動,因爲在開發模式下,沒有AOT的情況下,一切看起來都正常。 – Maxime