2017-04-21 95 views
0

比方說,我有我的終極版應用程序的初始狀態,看起來像這樣:終極版添加UI屬性狀態對象

{ 
    themeParks : [] 
} 

和主題公園的對象存儲在MongoDB中或其它地方是這樣的:

{ 
    ParkName : "Disney World", 
    NumberOfRides : 25 
} 

我的應用程序提取(通過ajax)並顯示加載的主題公園,並允許我執行CRUD操作以添加/刪除/編輯主題公園。

我的問題是,在我需要的新屬性中,合併應用程序中與UI更改相關並需要包含在狀態中的最佳點是什麼?例如,在某些時候,我需要一個「編輯」布爾屬性添加到每個主題公園,讓它們看起來像這樣:

{ 
    ParkName : "Disney World", 
    NumberOfRides : 25, 
    editing : false 
} 

這種「編輯」標誌需要在每個主題公園對象的屬性,提供在使用應用程序時讓多個主題樂園處於可編輯狀態的能力,這是否正確?顯然,我不想或不需要將此標誌存儲在我的數據庫模式中,因爲它只涉及UI操作。

我的第一個猜測將包括數據,像這樣的成功返回後,我的.then函數中這樣的邏輯,但我不知道:

let ajax = new AjaxHanlder(); 
let promise = ajax.DoGet('/path/to/api-endpoint'); 
promise.then((themeParks) => { 
    themeParks.map((themePark, i) => { 
     themePark.editing = false; 
    }); 
    dispatch({type : LOAD_THEME_PARKS, payload : themeParks}); 
}); 

此外,有沒有用於提供一個約定由於初始狀態是一個空數組,並且不知道它,因此在加載主題樂園對象之前定義了它?

在此先感謝有這方面的見解,因爲我試圖提高自己的終極版設計模式的知識:-)

回答

1

我建議加入editing屬性您LOAD_THEME_PARKS減速。例如,您LOAD_THEME_PARKS減速的一部分可能看起來像:

case LOAD_THEME_PARKS: 
    return { 
      ...state, 
      themeParks: action.payload.map(park => park.editing = false) 
    }; 
+0

沒想到減速機內加入新的道具,但是是有道理的。我試了一下,非常感謝您的反饋。 –

+0

已經在實踐中發現它,並發現它很好地工作。 @Nysor再次感謝 –