# Actions
ํผ๋์์ ์ก์ (actions)์ ๋ทฐ์์ค์ ๋ฎคํ ์ด์ (mutations)์ ์ก์ (actions)์ ํฉ์ณ๋์ ์์ฑ์ ๋๋ค. ๊ธฐ์กด์ ๋ทฐ์์ค์์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํ๋ ค๋ฉด ๋ค์์ ์ ์ฐจ๋ฅผ ๋ฐ๋ผ์ผ ํ์ต๋๋ค.
- actions -> mutations -> state
์ก์ ์์ API ์์ฒญ์ ํ๊ณ ๋ฐ์์จ ๊ฐ์ ๋ฎคํ ์ด์ ์์ ๋๊ธด ํ ๋ฎคํ ์ด์ ์์ ์ํ๋ฅผ ๋ณ๊ฒฝํด ์ฃผ๋ ๋ฐฉ์์ด์์ต๋๋ค. ์ด ๋ฐฉ์์ ๋ฌธ๋ฒ์ ์ธ ์ธก๋ฉด์์ ๋ค์ ์ฅํฉํ๊ณ ๋ฒ๊ฑฐ๋ก์ด ์ธก๋ฉด์ด ์์ด ํผ๋์์์๋ ์๋์ ๊ฐ์ด ๋จ์ํ ๋์์ต๋๋ค.
- actions -> state
# actions ์ ์ธ
์ก์ ์ ํ๋ ์ ์ธํด ๋ณด๊ฒ ์ต๋๋ค.
export const useStore = defineStore('app', {
state: () => {
return {
count: 0
}
},
actions: {
addCount() {
this.count++;
}
}
});
์ ์ฝ๋๋ count
๋ผ๋ ์ํ ๊ฐ์ 1์ฉ ์ฆ๊ฐ์ํค๋ addCount()
์ก์
ํจ์๋ฅผ ์์ฑํ์ต๋๋ค. ๋ทฐ์์ค์ ๋ค๋ฅด๊ฒ ์ก์
ํจ์ ์์์ this
๋ฅผ ์ด์ฉํ์ฌ ๋ฐ๋ก state
์ ์ ๊ทผํ ์ ์์ต๋๋ค.
๋ํ, ์๋์ ๊ฐ์ด ๋น๋๊ธฐ ์ฝ๋๋ ์์ฑํ ์ ์์ต๋๋ค.
export const useStore = defineStore('app', {
state: () => {
return {
count: 0
}
},
actions: {
async fetchCount() {
const response = await axios.get('/v1/api/productCount');
this.count = response.data;
}
}
});
# actions ์ฌ์ฉ
์ก์ ์ state, getters์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ปดํฌ๋ํธ์์ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํฉ๋๋ค.
<template>
<button @click="store.addCount">๋ํ๊ธฐ</button>
<p>{{ store.count }}</p>
</template>
์ ์ฝ๋์์ ๋ํ๊ธฐ ๋ฒํผ์ ๋๋ฅด๋ฉด addCount()
์ก์
ํจ์๊ฐ ์คํ๋๋ฉด์ ์คํ ์ด์ count
์ํ๊ฐ ์ฆ๊ฐ๋ฉ๋๋ค.
โ Getters ๐ Vue Folder Structure โ