VUE

[VUE] VUEX ์•Œ์•„๋ณด๊ธฐ

์˜ˆ๊ธ€ 2024. 4. 21. 21:27

๐Ÿš€ VUEX๋ž€?

  • ๋ฌด์ˆ˜ํžˆ ๋งŽ์€ ์ปดํฌ๋„ŒํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ƒํƒœ ๊ด€๋ฆฌ ํŒจํ„ด์ด์ž ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • React์˜ Flux ํŒจํ„ด์—์„œ ๊ธฐ์ธํ•จ
  • Vue.js ์ค‘๊ณ ๊ธ‰ ๊ฐœ๋ฐœ์ž๋กœ ์„ฑ์žฅํ•˜๊ธฐ ์œ„ํ•œ ํ•„์ˆ˜ ๊ด€๋ฌธ

 

๐Ÿš€ Flux๋ž€?

  • MVC ํŒจํ„ด์˜ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฐœ๋ฐœ ํŒจํ„ด - Unidirectional data flow

  • action: ํ™”๋ฉด์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ ๋˜๋Š” ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ
  • dispatcher: ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•, ๋ฉ”์„œ๋“œ
  • model: ํ™”๋ฉด์— ํ‘œ์‹œํ•  ๋ฐ์ดํ„ฐ
  • view: ์‚ฌ์šฉ์ž์—๊ฒŒ ๋น„์ถฐ์ง€๋Š” ํ™”๋ฉด

 

  • ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์ด ์—ฌ๋Ÿฌ ๊ฐˆ๋ž˜๋กœ ๋‚˜๋‰˜์ง€ ์•Š๊ณ  ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ์ฒ˜๋ฆฌ

 

๐Ÿš€ Vuex๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ปดํฌ๋„ŒํŠธ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๋ฉด ์ปดํฌ๋„ŒํŠธ ๊ฐ„์— ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์ด ์–ด๋ ค์›Œ์ง

 

๐Ÿš€ Vuex๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ

1. MVC ํŒจํ„ด์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ตฌ์กฐ์  ์˜ค๋ฅ˜

2. ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ช…์‹œ

3. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปดํฌ๋„ŒํŠธ์—์„œ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ๋•Œ ๋™๊ธฐํ™” ๋ฌธ์ œ

 

๐Ÿš€ Vuex ์ปจ์…‰

  • State: ์ปดํฌ๋„ŒํŠธ ๊ฐ„์— ๊ณต์œ ํ•˜๋Š” ๋ฐ์ดํ„ฐ data()
  • View: ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ํ™”๋ฉด template
  • Action: ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” methods

๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ์ฒ˜๋ฆฌ๋ฅผ ๋‹จ์ˆœํ•˜๊ฒŒ ๋„์‹ํ™”ํ•œ ๊ทธ๋ฆผ

 

 

๐Ÿš€ Vuex ๊ตฌ์กฐ

์ปดํฌ๋„ŒํŠธ -> ๋น„๋™๊ธฐ ๋กœ์ง -> ๋™๊ธฐ ๋กœ์ง -> ์ƒํƒœ

 

๐Ÿš€ Vuex ์‹œ์ž‘ํ•˜๊ธฐ

1๏ธโƒฃ src ํด๋” ๋ฐ‘์— store ํด๋”๋ฅผ ๋งŒ๋“ค๊ณ  store.js ํŒŒ์ผ ์ƒ์„ฑ

import Vue from "vue";
import Vuex from "vuex";

Vue.use(Vuex);

export const store = new Vuex.Store({});

 

2๏ธโƒฃ main.js์— ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

import Vue from "vue";
import App from "./App.vue";
import { store } from "./store/store";

new Vue({
  el: "#app",
  store,
  render: (h) => h(App),
});

 

3๏ธโƒฃ  Vuex ๊ธฐ์ˆ  ์š”์†Œ

  • state: ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ์— ๊ณต์œ ๋˜๋Š” ๋ฐ์ดํ„ฐ data()
  • getters: ์—ฐ์‚ฐ๋œ state ๊ฐ’์— ์ ‘๊ทผํ•˜๋Š” ์†์„ฑ computed()
  • mutations: state ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ์ด๋ฒคํŠธ ๋กœ์ง, ๋ฉ”์„œ๋“œ methods
  • actions: ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ์„ ์–ธํ•˜๋Š” ๋ฉ”์„œ๋“œ async methods

 

1. state๋ž€?

์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์— ๊ณต์œ ํ•  ๋ฐ์ดํ„ฐ - ์ƒํƒœ

// Vue
data : {
  message: 'Hello Vue.js!'
}

// Vuex
state : {
  message: 'Hello Vue.js!'
}
<!-- Vue -->
<p> {{ message }} </p>

<!-- Vuex -->
<p> {{ this.$store.state.message }} </p>

 

 

2. getters๋ž€?

  • state ๊ฐ’์„ ์ ‘๊ทผํ•˜๋Š” ์†์„ฑ์ด์ž computed()์ฒ˜๋Ÿผ ๋ฏธ๋ฆฌ ์—ฐ์‚ฐ๋œ ๊ฐ’์„ ์ ‘๊ทผํ•˜๋Š” ์†์„ฑ
// store.js

state:{
  num : 10
},
getters: {
  getNumber(state) {
    return state.num;
  },
  doubleNumber(state) {
    return state.num * 2;
  }
}
<p> {{ this.$store.getters.getNumber }} </p>
<p> {{ this.$store.getters.doubleNumber }} </p>

 

๋Œ“๊ธ€์ˆ˜0