[英]Remove a property from an immutable JS object
在我的本機應用程序中,我想刪除Redux中的js對象的屬性。
這是我的代碼。
case SAVE_PLAYLIST:
const { toPlayListFrom, selectedPlaylist } = action.payload;
let newPlaylists = // state.savedPlaylists;
Object.keys(selectedPlaylist).length > 0
? {
...state.savedPlaylists,
[toPlayListFrom]: selectedPlaylist
}
: delete state.savedPlaylists[toPlayListFrom];
return {
...state,
savedPlaylists: newPlaylists
}
在此行中, delete state.savedPlaylists[toPlayListFrom]
不會刪除屬性。 如何以正確的方式從不可變的js對象中刪除屬性?
您的刪除語句是錯誤的。 該命令通常返回true(在某些情況下,它可能返回false。)
同樣,正如TJ Crowder提到的那樣,您不想修改state
變量。
首先,您要創建數據的副本,然后在副本上應用刪除。
case SAVE_PLAYLIST:
const { toPlayListFrom, selectedPlaylist } = action.payload;
let newPlaylists = // state.savedPlaylists;
Object.keys(selectedPlaylist).length > 0
? {
...state.savedPlaylists,
[toPlayListFrom]: selectedPlaylist
}
: ...state.savedPlaylists;
// only apply a delete to the copy, not the original
//
if (Object.keys(selectedPlaylist).length === 0) {
delete newPlaylists.savedPlaylists[toPlayListFrom]
}
return {
...state,
savedPlaylists: newPlaylists
}
在JavaScript中要記住的一件事是對象使用引用。 因此,如果您不首先進行復制,則是在更改所述對象(或者嘗試至少將某些對象標記為不可變的( const
,實際上),因此無法對其進行修改。)
我敢肯定有優化上面代碼的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.