Первое, и самое важное - не привязывайтесь к событиям DOM! Используйте обработчики событий Vue. Зачем с реактивными фреймворками типа Vue, React, Angular работать в стиле jQuery?
Уберите все из
mounted()
, кроме вызова
dispatch
.
Сделайте нормальную
обработку событий.
В противном случае вся реактивность убивается.
И классы тоже надо выводить через computed свойства (на крайний случай через data), а не вставлять императивным методом.
<template>
...
<button id="s" class="toggle-search" v-on:click="clear"></button>
...
</template>
export default {
// ...,
methods: {
clear() {
this.search = '';
},
},
// ...,
};
Еще в store надо завести флаг статуса (не готов, готов, загружается, загружено...), чтобы соответствующим образом отображать всякие лоадеры, спиннеры и пр.. Думайте о пользователе сразу!
И советую подробно ознакомиться с документацией по Vue - она на понятном
русском языке!