скажем, когда вы создаете массив / объект в Javascript,
var arr = [1,2,3];
Это создает массив в памяти браузера.Но то, что содержит переменная arr
, это не полное значение массива, а ссылка на массив в памяти браузера.Вы можете подумать, что arr
содержит адрес, который может указать вам реальное значение массива в памяти браузера.
, если вы выполните
var arr = [1,2,3];
var arr2 = arr;
arr2[0] = 4;
console.log(arr); // you would get [4,2,3];
редактирование arr2
изменение arr
тоже.Поскольку оба они указывают на один и тот же массив в памяти браузера.
Вот что " старое значение будет таким же, как и новое значение, поскольку они ссылаются на один и тот же объект / массив "означает.
Тот же принцип применим и к объекту.В Javascript массив - это просто особый тип объекта.
для извлечения различных версий массива в наблюдателе, вы должны клонировать его, чтобы установить его как новый массив каждый раз, когда вы изменяете его.
Например,
state.orderBookSell = [...state.orderBookSell];
НО ..... [...array]
- это мелкое клонирование, а не глубокое клонирование.И это проблема.У вас есть массив объектов.Помните, что объект также имеет те же правила.Они передаются по ссылке.Так что вам нужно выполнить глубокое клонирование, чтобы клонировать все объекты.
, используя lodash cloneDeep метод для глубокого клонирования
state.orderBookSell = _.cloneDeep(state.orderBookSell);