У меня есть геттер в VUEX, и я пытаюсь отфильтровать массив внутри массива, но продолжаю получать предупреждение об изменении состояния внутри геттера.
Ошибка: [vuex] не изменять состояние хранилища vuex вне обработчиков мутаций
Я знаю, что могу сделать простой фильтр в массиве верхнего уровня, но, похоже, он не работает с массивом людей, единственный способ, которым я могу заставить его показать результаты, которые я хочу, - это сделать следующее (что неправильно)
for (const company of company.companies) {
const filteredPeople: IPerson[] = company.people.filter(
x => x.jobId === 1
);
company.people = filteredPeople;
}
Можете ли вы добавить свой код, который выдает ошибку, вместо кода, который работает, но неверен?
@maxshuty Код выше - это то, что дает ошибку vuex
return company.companies.map(c => ({...c, people: c.people.filter(p => p.jobId === 1)}))
Короче говоря, вы не можете изменять состояние внутри геттеров, так как это легко приведет к бесконечным циклам. Кроме того, геттеры не предназначены для изменения какого-либо внешнего состояния, а просто возвращают (возможно, транслируют) часть состояния для дальнейшего представления данных. Попробуйте этот фрагмент кода, вместо изменения состояния вы возвращаете переведенные копии companies
с отфильтрованным people
:
return company.companies.map(c => ({...c, people: c.people.filter(p => p.jobId === 1)}))
Вероятно, это потому, что вы назначаете
company.people = filteredPeople
, попробуйте сделать это внутриmutation
вместоaction
.