Junior
Објасните шта је Vuex својим речима.
sobes.tech АИ
Одговор од АИ
Vuex је библиотека за управљање стањем за Vue.js апликације. Она представља централизовано складиште за све компоненте апликације, где можете чувати податке који треба да буду доступни из различитих делова апликације без потребе да их преносите кроз пропсе или догађаје.
Vuex се састоји од следећих главних делова:
- State: Објекат који садржи све заједничке податке апликације. То је "једини извор истине".
- Getters: Функције за добијање података из стања. Сличне су израчунским својствима у Vue компонентама.
- Mutations: Функције које директно мењају стање. Оне су синхроне. Једини начин да се промени state је позивом mutation.
- Actions: Функције које могу садржати асинхроне операције. Не мењају стање директно, већ позивају mutations.
- Modules: Омогућавају делење складишта на модуле, сваки са својим state, getters, mutations и actions, за велике апликације.
Принцип рада:
- Компоненте добијају податке из
stateпрекоgetters. - Акције корисника (кликови, уноси) позивају
actions. Actionsмогу извршавати асинхроне операције (нпр. захтеви ка API-ју).Actionsпозивајуmutationsза променуstate.- Промене у
stateаутоматски реактивно ажурирају компоненте.
Пример употребе:
Замислимо да имамо бројач, чија вредност треба да буде доступна из различитих компоненти.
// store.js
import { createStore } from 'vuex';
const store = createStore({
state() {
return {
count: 0
};
},
mutations: {
increment(state) {
state.count++;
},
decrement(state) {
state.count--;
}
},
actions: {
incrementAsync({ commit }) {
setTimeout(() => {
commit('increment');
}, 1000);
}
},
getters: {
doubleCount(state) {
return state.count * 2;
}
}
});
export default store;
<!-- Component.vue -->
<template>
<div>
<p>Бројач: {{ count }}</p>
<p>Дупли бројач: {{ doubleCount }}</p>
<button @click="increment">Додај</button>
<button @click="decrement">Узми</button>
<button @click="incrementAsync">Асинхроно додавање</button>
</div>
</template>
<script>
import { useStore } from 'vuex';
import { computed } from 'vue';
export default {
setup() {
const store = useStore();
const count = computed(() => store.state.count);
const doubleCount = computed(() => store.getters.doubleCount);
const increment = () => store.commit('increment');
const decrement = () => store.commit('decrement');
const incrementAsync = () => store.dispatch('incrementAsync');
return {
count,
doubleCount,
increment,
decrement,
incrementAsync
};
}
};
</script>
Vuex помаже у организовању управљања стањем апликације, чинећи га предвидљивијим и лакшим за дебаговање, посебно у великим и сложеним пројектима.