在我的本机应用程序中,我想删除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对象中删除属性?
答案 0 :(得分:1)
您的delete陈述是错误的。该命令通常返回true(在某些情况下,它可能返回false。)
此外,正如T.J.拥挤者,您不想修改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
,因此无法对其进行修改)。)>
我确定有多种方法可以优化上面的代码。