Vuex state.array.push добавляет объекты внутрь строки массива

Я разрабатываю функциональность фильтра, и после нажатия массива Vuex помещает все объекты массива в одну строку массива.

pushFiltered (state, payload) {  
    state.filtered.push(payload)
},

Это результат инструментов vue dev:

filtered:Array[3]
0:Object
1:Object
2:Array[2]
  >0:Object
  >1:Object

Как правильно извлечь и нажать? Также распространите оператор, concat тоже не помогает.

ОБНОВЛЕНИЕ: я нашел решение. Если есть один объект, и вы хотите поместить весь объект в массив, вам не нужно повторять объект. из stackoverflow

Это мое решение:

pushFiltered (state, payload) {
        payload.forEach(function(row) {
          state.filtered.push(row)
        });
    }

Это работает, но я не знаю, хорошая практика или нет


person Dilovar Azimov    schedule 03.06.2020    source источник


Ответы (1)


Основываясь на вашем коде, я предполагаю, что первый раз фильтруется не массив, я имею в виду начальное состояние в магазине.

Итак, если вы передаете и массив объектов и хотите их подтолкнуть, вы можете сделать это следующим образом:

Исходное состояние отфильтровано:

...
filtered: [],
...

Мутация:

mergeFiltered (state, payload) {
    state.filtered = [...state.filtered, ...payload]
}

Таким образом вы выполняете слияние между текущими значениями в отфильтрованном массиве и входящей полезной нагрузкой.

person Andres Foronda    schedule 03.06.2020