# 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 ์ƒํƒœ๊ฐ€ ์ฆ๊ฐ€๋ฉ๋‹ˆ๋‹ค.