Vuex๋ž€..?

Jung taeWoongยท2021๋…„ 3์›” 27์ผ
0

vue.js

๋ชฉ๋ก ๋ณด๊ธฐ
2/9
post-thumbnail

๐Ÿค” Vuex๋ž€..?

Vue.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์ƒํƒœ ๊ด€๋ฆฌ ํŒจํ„ด + ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • redux์™€ ๋น„์Šทํ•œ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • ๋ฌด์ˆ˜ํžˆ ๋งŽ์€ ์ปดํฌ๋„ŒํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋“ค์— ๋Œ€ํ•œ ์ค‘์•™ ์ง‘์ค‘์‹ ์ €์žฅ์†Œ์˜ ์—ญํ•  ๋ฐ ๊ด€๋ฆฌ๋ฅผ ๋‹ด๋‹น
  • ๊ณตํ†ต์˜ ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•˜๋Š” ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๊ธฐ ์ ํ•ฉ
  • ์™ธ๋ถ€ API๋ฅผ ๋ฐ”๋กœ ๋ถˆ๋Ÿฌ๋‹ค ์“ฐ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ค‘๊ฐ„์—์„œ vuex์˜ state์— API ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„์„œ ์‚ฌ์šฉ

๐Ÿ˜Ž Vuex๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ 

  • ๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ปดํฌ๋„ŒํŠธ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๋ฉด ์ปดํฌ๋„ŒํŠธ ๊ฐ„์— ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์ด ์–ด๋ ค์›€
  • ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ํ•œ๊ณณ์—์„œ ์ค‘์•™ ์ง‘์ค‘์‹์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด
  • ์ƒํƒœ ์ •๋ณด๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ์ƒํ™ฉ๊ณผ ์‹œ๊ฐ„์„ ์ถ”์  ๊ฐ€๋Šฅ!
  • ์ปดํฌ๋„ŒํŠธ์—์„œ ์ƒํƒœ ์ •๋ณด๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ํ†ต์‹ ์ด๋‚˜ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์„ ์ข€ ๋” ์œ ๊ธฐ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ํ•„์š”์„ฑ์ด ์žˆ์Œ
  • ๋ทฐ์˜ ์ปดํฌ๋„ŒํŠธ ๋ฐฉ์‹์ธ props, event emit ๋–„๋ฌธ์— ์ค‘๊ฐ„์— ๊ฑฐ์ณ์•ผํ•  ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งŽ์•„์ง€๊ฑฐ๋‚˜ ์ด๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด Event Bus๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์šด ๋ฌธ์ œ์  ๋ฐœ์ƒ
  • ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ ํŠน์ • ๊ทœ์น™ ์ ์šฉ๊ณผ ๊ด€๋ จ๋œ ๊ฐœ๋…์„ ์ •์˜ํ•˜๊ณ  ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ์ฝ”๋“œ์˜ ๊ตฌ์กฐ์™€ ์œ ์ง€ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ํ–ฅ์ƒ

Vuex ๊ตฌ์กฐ

Action

  • ๋น„๋™๊ธฐ ํ˜ธ์ถœ(Backend API)์€ ๋ชจ๋‘ Action์—์„œ ํ˜ธ์ถœ
  • dispatch('ํ•จ์ˆ˜๋ช…', '์ „๋‹ฌ์ธ์ž') ๋ฐฉ์‹์œผ๋กœ ํ˜ธ์ถœ
  • ๋น„๋™๊ธฐ์ฒ˜๋ฆฌ ๊ธฐ์ค€

// Store
 action: {
   ActionName(context) {
     ๋น„๋™๊ธฐํ˜ธ์ถœ()
     .then(res => {
       context.commit('MutationName', data); //mutation ์ „๋‹ฌ
     })
       .catch(err => {	
     });
   }
 }

// Component
export default {
  created() {
    this.$store.dispatch('ActionName'); //Action ํ˜ธ์ถœ
  }
}

Mutations

  • ๋น„๋™๊ธฐ ํ˜ธ์ถœ๋กœ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ State์— ๋‹ด์Œ
  • State ๋ณ€๊ฒฝ์„ ๋‹ด๋‹น (๋ฐ˜๋“œ์‹œ Mutation์„ ํ†ตํ•ด์„œ๋งŒ State๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผํ•จ)
  • commit('ํ•จ์ˆ˜๋ช…', '์ „๋‹ฌ์ธ์ž') ๋ฐฉ์‹์œผ๋กœ ํ˜ธ์ถœ
  • ๋™๊ธฐ์ฒ˜๋ฆฌ ๊ธฐ์ค€
 mutation: {
   MutationName(state, data) {
	state.dataName = data;
   }
 }

State

  • ๊ณตํ†ต์œผ๋กœ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•œ ๊ฒƒ
  • ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ๊ณณ์—์„œ ์ด๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋“ค์—์„œ ๊ณตํ†ต๋œ ๊ฐ’์„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
 state: {
   dataName: ์ดˆ๊ธฐ๊ฐ’,
 }

Getters

  • vue์˜ computed์™€ ๋™์ผ์†์„ฑ์ธ๋ฐ ๋‹ค๋งŒ store์— ์žˆ๋Š” ๊ฒƒ
  • ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋™์ผํ•œ computed๊ฐ€ ์‚ฌ์šฉ๋  ๊ฒฝ์šฐ Getters์— ์ •์˜ ํ›„ ์‚ฌ์šฉ
// Store
 getters: {
   computedName(state) {
     return state.dataName
   }
 }

// Componenet
import { mapGetters } from 'vuex';

export default {
  computed: {
    ...mapGetters([
      'computedName' // ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ ์“ธ ๊ฒฝ์šฐ ๋ฐฐ์—ด, ์•„๋‹ˆ๋ฉด ๊ฐ์ฒด key:valueํ˜•์‹
    ])
  }
}
profile
Front-End ๐Ÿ˜ฒ

0๊ฐœ์˜ ๋Œ“๊ธ€