๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
[๊ฐœ๋ฐœ] Practice/Vue.js

[Vue.js] Vuex1: Vuex ์…‹ํŒ…ํ•˜๊ธฐ

by Connecting-the-dots 2022. 4. 7.
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ’ก ์‹ค์Šต ํฌ์ธํŠธ!


๐Ÿ’œ Vuex ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  ์•Œ์•„๋ณด๊ธฐ

  • Vuex ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํ•„์ˆ˜๋กœ ์„ค์น˜ํ•ด์•ผ ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์•„๋‹ˆ๋‹ค.

๐Ÿค props ์™€ custom event ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ฒŒ ํž˜๋“ค ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

  • Vuex ๋ฅผ ์„ค์น˜ํ•˜๋ฉด js ํŒŒ์ผ ํ•˜๋‚˜์—๋‹ค๊ฐ€ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ์ด๋กœ ์ธํ•ด, ๋ชจ๋“  Component ๋“ค์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ๊บผ๋‚ด์–ด ์‚ฌ์šฉํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • props ๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š” ์—†์ด ๋ชจ๋“  Component ๊ฐ€ ๋ฐ์ดํ„ฐ์— ์ง์ ‘์ ์œผ๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ด์ง€๋Š” ๊ฒƒ์ด๋‹ค.

๐Ÿค Vue ํŒŒ์ผ๊ณผ ๋ฐ์ดํ„ฐ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์„ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค.

  • Vuex ๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ƒํƒœ๊ด€๋ฆฌ(๋ฐ์ดํ„ฐ๊ด€๋ฆฌ) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ๊ณ  ํ•œ๋‹ค.
  • ๋งŒ์•ฝ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ Component ์—์„œ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ๊ฐ‘์ž๊ธฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด, ์–ด๋””์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์ฐพ๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๊ณณ์„ ๋‹ค ํ™•์ธํ•ด์•ผํ•œ๋‹ค.
  • ํ•˜์ง€๋งŒ Vuex ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์กฐ์ฐจ๋„ ํ•œ ๊ณณ์—์„œ ๋ชจ๋‘ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋””๋ฒ„๊น…ํ•˜๊ธฐ๊ฐ€ ์‰ฝ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ ํฐ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ์—๋Š” Vuex ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์œผ๋‚˜, ์ž‘์€ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์˜คํžˆ๋ ค ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์— ๋น„ํ•ด ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ฝ”๋“œ๋งŒ ๊ธธ์–ด์ง€๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ ์ ˆํ•˜๊ฒŒ ํŒ๋‹จํ•˜์—ฌ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

๐Ÿ’œ Vuex ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉํ•˜๊ธฐ

๐Ÿค Vuex ์„ค์น˜ํ•˜๊ธฐ

  • ๊ตฌ๊ธ€์— Vuex ๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ Vuex ํ™ˆํŽ˜์ด์ง€์— ์ ‘์†ํ•ด์„œ Installation ํƒญ์— ๋“ค์–ด๊ฐ€๋ฉด ์œ„์™€ ๊ฐ™์ด ํ„ฐ๋ฏธ๋„์— ์ž…๋ ฅํ•ด์•ผํ•˜๋Š” ์„ค์น˜ ๋ช…๋ น์–ด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์œ„ ๋‘ ์ฝ”๋“œ ์ค‘์— ์›ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๊ณจ๋ผ์„œ ํ„ฐ๋ฏธ๋„์— ์ž…๋ ฅํ•˜๋ฉด ์„ค์น˜๊ฐ€ ๋œ๋‹ค.

๐Ÿค Vuex ์…‹ํŒ…ํ•˜๊ธฐ

import { createStore } from 'vuex'

const store = createStore({
  state(){
    return {
      
    }
  },
})

export default store
  • Vuex ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์„ค์น˜๋˜๋ฉด ์ž‘์—… ํด๋” ๋‚ด์˜ src ํด๋” ์•ˆ์— store.js ๋ฅผ ๋งŒ๋“ค๊ณ  ์œ„์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ค€๋‹ค.

 

import store from './store'

app.use(store).mount('#app')
  • ์ด์ œ main.js ํŒŒ์ผ์— store.js ํŒŒ์ผ์„ store ๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ import ํ•ด์ฃผ๊ณ , app.mount('#app') ์ด๋ผ๋Š” ์ฝ”๋“œ๋ฅผ ์œ„์™€ ๊ฐ™์ด ์ˆ˜์ •ํ•ด์ค€๋‹ค.
    (๋‚˜๋Š” store ๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ export / import ๋ฅผ ์ง„ํ–‰ํ–ˆ์ง€๋งŒ ๋‹ค๋ฅธ ์ด๋ฆ„์„ ์“ฐ๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ์ง€์–ด๋„ ์ƒ๊ด€์€ ์—†๋‹ค.)

๐Ÿค Vuex ์‚ฌ์šฉํ•˜๊ธฐ

  • ์œ„ ๊ณผ์ •๊นŒ์ง€ ๋ชจ๋‘ ์™„๋ฃŒํ•˜๋ฉด store.js ์— ์ €์žฅํ•œ ๋ฐ์ดํ„ฐ๋“ค์€ ๋ชจ๋“  Component ๊ฐ€ ๊ฐ€์ ธ๋‹ค ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋ฐ์ดํ„ฐ ์ €์žฅ์€ store.js ์—๋‹ค ํ•˜๋ฉด ๋˜๊ณ , vue ํŒŒ์ผ์—์„œ ์‚ฌ์šฉํ•  ๋•Œ์—๋Š” $store.state.๋ฐ์ดํ„ฐ์ด๋ฆ„ ๊ณผ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
  • ํ•จ์ˆ˜๋‚˜ mounted ์•ˆ์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด this.$store.state.๋ฐ์ดํ„ฐ์ด๋ฆ„ ๊ณผ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

728x90
๋ฐ˜์‘ํ˜•