Вы не должны использовать Map
, по крайней мере, не так.Вы мутируете государством.Посмотрите на эту строку:
let newOwnerNotes = state.myNotes;
newOwnerNotes.set(noteAdded.note_id, noteAdded);
Вы просто ссылаетесь на один и тот же объект.Попробуйте так:
let newOwnerNotes = new Map(state.myNotes);
newOwnerNotes.set(noteAdded.note_id, noteAdded);
Вы должны всегда помнить, что массивы, объекты, карты - все это reference types
, посмотрите на следующий фрагмент:
const arr = [1,2,3,4,5]
const copy = arr
const realCopy = [...arr]
console.log(copy, realCopy) //[1,2,3,4,5],[1,2,3,4,5]
console.log(copy === arr) //true
console.log(realCopy === arr) //false
Когда вы просто назначаете какconst copy = arr
вы не создаете другой массив, вы просто ссылаетесь на тот же объект, но во второй ситуации (с использованием оператора распространения) вы создаете другой массив, который содержит распространение всех элементов из arr
.Подробнее о неизменяемости в JS см. Здесь.
Когда вы делаете const newNotes = new Map(state.myNotes)
, вы создаете другой объект, теперь вы делаете свои изменения и в конце концов: return {...state, myNotes: newOwnerNotes};