Бесконечное обновление компонента Vue.js

У меня в учебном проекте на Vue.js (, Vuex) есть предупреждение о бесконечной петле обновления компонента (и он действительно обновляется много раз), но я не могу понять откуда растут ноги у этой ошибки. Из-за чего происходит? Ошибка происходит после нажатия на чек боксы сверху (обновление: и без чек боксов тоже). Изображение компонента и ошибки в консоле

Компонент в котором происходит зацикливание выводится так:

<MovieCardList 
  v-else
  :movies="filteredMovies"
/>
</div>

Событие чекбокса обновляет состояние хранилища так:

TOGGLE_SORTER_STATE: (state, name) => {
state.filteredMovies.sorters.forEach(
    (sorter) => {
        sorter.on = name === sorter.name? !sorter.on:false;
    }
  );
}

Здесь я использую самописный класс DataProvider, инициализация которого выглядит так:

state.filteredMovies = new DataProvider(
    {
        data: [...movies],
        sorters: [
                   {
                      name: 'Отсортировать по названию',
                      on: false,
                      sorter: (movie1, movie2) => {
                                return movie1.title === movie2.title? 0 : movie1.title < movie2.title? -1 : 1;
                              }
                    },
                    {
                      name: 'Отсортировать по году',
                      on: false,
                      sorter: (movie1, movie2) => {
                                return movie1.year === movie2.year? 0 : movie1.year < movie2.year? -1 : 1;
                              }
                    }
               ]
    }
)

DataProvider имеет итератор, который проходится по массиву в поле data (точнее по его фильтрованной копии). Соответственно, через итератор происходит и отрисовка в компоненте.

Код итератора:

// Iterator
[Symbol.iterator](){
    this.filteredData = [...this.data];
    if(this.sorters){
        this.sorters.forEach(
                (sorter) => {
                    if(sorter.on){
                        this.filteredData.sort(sorter.sorter)
                }
            }
        );
    }
    let current = this.filteredData[Symbol.iterator]();
    const iterator = {
        next(){
            let next = current.next()
            if(next.done){
                return {
                    done: true
                }
            }else{
                return {
                    done: false,
                    value: next.value
                }
            }
        }
    }
    return iterator;
}

Оказалось дело в использовании sort и filter внутри итератора. Только не могу понять почему и как это исправить...


Ответы (0 шт):