TGViewer
Frontend | Вопросы собесов Frontend | Вопросы собесов @easy_javascript_ru · 17.6K subscribers
Post #1921 3.19K
🤔 Как взаимодействовать с vuex js?

Vuex — это централизованное хранилище для управления состоянием в приложениях Vue.js. Оно используется, когда несколько компонентов нуждаются в доступе к общему состоянию.

🟠Подключение Vuex в проект
Сначала установим Vuex, если он ещё не установлен:
npm install vuex


Теперь создадим хранилище (store)
import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({
state: {
count: 0
},
mutations: {
increment(state) {
state.count++;
}
},
actions: {
incrementAsync({ commit }) {
setTimeout(() => {
commit('increment');
}, 1000);
}
},
getters: {
doubleCount: state => state.count * 2
}
});


Затем подключаем это хранилище в main.js
import Vue from 'vue';
import App from './App.vue';
import store from './store';

Vue.config.productionTip = false;

new Vue({
store, // Подключаем Vuex-хранилище
render: h => h(App)
}).$mount('#app');


🟠Доступ к данным из Vuex (state)
Чтобы получить данные из хранилища (state), можно использовать this.$store.state или mapState.
<template>
<div>
<p>Счетчик: {{ $store.state.count }}</p>
</div>
</template>


С использованием mapState
<script>
import { mapState } from 'vuex';

export default {
computed: {
...mapState(['count'])
}
};
</script>


🟠Изменение состояния (mutations)
В Vuex нельзя изменять state напрямую, для этого используются mutations.
<template>
<button @click="$store.commit('increment')">Увеличить</button>
</template>


Или с помощью mapMutations
<script>
import { mapMutations } from 'vuex';

export default {
methods: {
...mapMutations(['increment'])
}
};
</script>

<template>
<button @click="increment">Увеличить</button>
</template>


🟠Асинхронные действия (actions)
Мутации не поддерживают асинхронные операции, поэтому для этого используются actions.
<template>
<button @click="$store.dispatch('incrementAsync')">Увеличить через 1 сек</button>
</template>


Или с mapActions
<script>
import { mapActions } from 'vuex';

export default {
methods: {
...mapActions(['incrementAsync'])
}
};
</script>

<template>
<button @click="incrementAsync">Увеличить через 1 сек</button>
</template>


🟠Использование геттеров (getters)
Геттеры работают как вычисляемые свойства (computed), позволяют получать обработанные данные из state.
<template>
<p>Удвоенный счетчик: {{ $store.getters.doubleCount }}</p>
</template>


Или с mapGetters
<script>
import { mapGetters } from 'vuex';

export default {
computed: {
...mapGetters(['doubleCount'])
}
};
</script>

<template>
<p>Удвоенный счетчик: {{ doubleCount }}</p>
</template>


🟠Модули Vuex (для больших проектов)
Если приложение большое, можно разделить Vuex-хранилище на модули:
const counterModule = {
state: () => ({ count: 0 }),
mutations: {
increment(state) {
state.count++;
}
},
getters: {
doubleCount: state => state.count * 2
}
};

export default new Vuex.Store({
modules: {
counter: counterModule
}
});


Ставь 👍 и забирай 📚 Базу знаний
  • 👍 10
  • 💊 5
More from @easy_javascript_ru
  1. Oct 6, 2026🤔 Как передать данные из родительского компонента в дочерний? Передача данных из родитель…
  2. Oct 6, 20265 офферов получили наши ребята на прошлой неделе Оффер на 4,2k долларов Оффер на 5k евро О…
  3. Oct 5, 2026Post #3014
  4. Oct 5, 2026🤔 Что известно про user-agent стили и способы работы с ними? User-agent стили — это базов…
  5. Oct 5, 2026🤔 Расскажи про mobx MobX — это библиотека для управления состоянием в JavaScript-приложен…
  6. Oct 4, 2026Post #3011
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →