Ваше удаление утверждение неверно.Команда обычно возвращает истину (в некоторых случаях она может возвращать ложь.)
Кроме того, как упомянул 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
, действительно) и, следовательно, не могут быть изменены).
Я уверен, что есть способы оптимизировать приведенный выше код.