Junior
Wyjaśnij, czym jest Vuex, własnymi słowami.
sobes.tech AI
Odpowiedź od AI
Vuex to biblioteka zarządzania stanem dla aplikacji Vue.js. Jest to scentralizowane przechowalisko dla wszystkich komponentów aplikacji, w którym można przechowywać dane dostępne z różnych części aplikacji bez konieczności przekazywania ich przez propsy lub zdarzenia.
Vuex składa się z następujących głównych części:
- State: Obiekt zawierający wszystkie wspólne dane aplikacji. To "jedno źródło prawdy".
- Getters: Funkcje do pobierania danych ze stanu. Są podobne do obliczanych właściwości w komponentach Vue.
- Mutations: Funkcje bezpośrednio zmieniające stan. Są synchroniczne. Jedynym sposobem zmiany stanu jest wywołanie mutation.
- Actions: Funkcje, które mogą zawierać operacje asynchroniczne. Nie zmieniają bezpośrednio stanu, lecz wywołują mutations.
- Modules: Pozwalają podzielić magazyn na moduły, każdy z własnym stanem, getterami, mutation i actions, dla dużych aplikacji.
Zasada działania:
- Komponenty pobierają dane z
stateprzezgetters. - Działania użytkownika (kliknięcia, wpisy) wywołują
actions. Actionsmogą wykonywać operacje asynchroniczne (np. zapytania do API).Actionswywołująmutationsw celu zmianystate.- Zmiany w
stateautomatycznie i reaktywnie aktualizują komponenty.
Przykład użycia:
Załóżmy, że mamy licznik, którego wartość powinna być dostępna z różnych komponentów.
// 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>Licznik: {{ count }}</p>
<p>Podwójny licznik: {{ doubleCount }}</p>
<button @click="increment">Dodaj</button>
<button @click="decrement">Odejmij</button>
<button @click="incrementAsync">Dodaj asynchronicznie</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 pomaga organizować zarządzanie stanem aplikacji, czyniąc je bardziej przewidywalnym i łatwiejszym do debugowania, szczególnie w dużych i złożonych projektach.