๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • What would life be If we had no courage to attemp anything?
Development/Vue.js

Vue.js - Vuex Core Concepts

by DevIseo 2022. 5. 13.

๐Ÿ”” Vuex Core Concepts


|Vuex ํ•ต์‹ฌ ์ปจ์…‰

  1. State
  2. Mutations
  3. Actions
  4. Getters

 

 

|State

  • โ€œ์ค‘์•™์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๋ชจ๋“  ์ƒํƒœ ์ •๋ณด (data)โ€
    • Vuex๋Š” single state tree๋ฅผ ์‚ฌ์šฉ
    • ์ฆ‰, ์ด ๋‹จ์ผ ๊ฐ์ฒด๋Š” ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ๋ฅผ ํฌํ•จํ•˜๋Š” โ€œ์›๋ณธ ์†Œ์Šค(single source of truth)โ€์˜ ์—ญํ• ์„ ํ•จ
    • ์ด๋Š” ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋งˆ๋‹ค ํ•˜๋‚˜์˜ ์ €์žฅ์†Œ๋งŒ ๊ฐ–๊ฒŒ ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•จ
  • ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์— ์žˆ๋Š” ํŠน์ • state๋ฅผ ์ค‘์•™์—์„œ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋จ
    • ์ด์ „์˜ ๋ฐฉ์‹์€ state๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ๊ฐ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ง์ ‘ ํ™•์ธํ•ด์•ผ ํ–ˆ์Œ
    • Vuex๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ์‹์€ Vuex Store์—์„œ ๊ฐ ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” state๋ฅผ ํ•œ ๋ˆˆ์— ํŒŒ์•… ๊ฐ€๋Šฅ
  • State๊ฐ€ ๋ณ€ํ™”ํ•˜๋ฉด ํ•ด๋‹น state๋ฅผ ๊ณต์œ ํ•˜๋Š” ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ์˜ DOM์€ (์•Œ์•„์„œ) ๋ Œ๋”๋ง
  • ๊ฐ ์ปดํฌ๋„ŒํŠธ๋Š” ์ด์ œ Vuex Store์—์„œ state ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉ

 

 

|Mutations

  • โ€œ์‹ค์ œ๋กœ state๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•โ€
  • mutation์˜ handler(ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜)๋Š” ๋ฐ˜๋“œ์‹œ ๋™๊ธฐ์ ์ด์–ด์•ผ ํ•จ
    • ๋น„๋™๊ธฐ์  ๋กœ์ง(ex. ์ฝœ๋ฐฑํ•จ์ˆ˜)์€ state๊ฐ€ ๋ณ€ํ™”ํ•˜๋Š” ์‹œ์ ์ด ์˜๋„ํ•œ ๊ฒƒ๊ณผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฝœ๋ฐฑ์ด ์‹ค์ œ๋กœ ํ˜ธ์ถœ ๋  ์‹œ๊ธฐ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์Œ (์ถ”์  ํ•  ์ˆ˜ ์—†์Œ)
  • ์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ ํ•ญ์ƒ state๋ฅผ ๋ฐ›์Œ - why? state๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋‹ˆ๊นŒ!
  • Actions์—์„œ commit() ๋ฉ”์„œ๋“œ์— ์˜ํ•ด ํ˜ธ์ถœ๋จ

 

 

|Actions

  • Mutations์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฐจ์ด์ ์ด ์žˆ์Œ
    1. state๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋Œ€์‹  mutations๋ฅผ commit() ๋ฉ”์„œ๋“œ๋กœ ํ˜ธ์ถœํ•ด์„œ ์‹คํ–‰
    2. mutations์™€ ๋‹ฌ๋ฆฌ ๋น„๋™๊ธฐ ์ž‘์—…์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Œ (Backend API์™€ ํ†ต์‹ ํ•˜์—ฌ Data Fetching ๋“ฑ์˜ ์ž‘์—… ์ˆ˜ํ–‰)
  • context ๊ฐ์ฒด ์ธ์ž๋ฅผ ๋ฐ›์Œ
    • context ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด store/index.js ํŒŒ์ผ ๋‚ด์— ์žˆ๋Š” ๋ชจ๋“  ์š”์†Œ์˜ ์†์„ฑ ์ ‘๊ทผ & ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅ
    • ๋‹จ, (๊ฐ€๋Šฅํ•˜์ง€๋งŒ) state๋ฅผ ์ง์ ‘ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Œ
  • ์ปดํฌ๋„ŒํŠธ์—์„œ dispatch() ๋ฉ”์„œ๋“œ์— ์˜ํ•ด ํ˜ธ์ถœ๋จ
  • โ€œActions๋ฅผ ํ†ตํ•ด state๋ฅผ ์กฐ์ž‘ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, state๋Š” ์˜ค๋กœ์ง€ Mutations๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์กฐ์ž‘ ํ•ด์•ผํ•จโ€
    • ๋ช…ํ™•ํ•œ ์—ญํ•  ๋ถ„๋‹ด์„ ํ†ตํ•ด ์„œ๋น„์Šค ๊ทœ๋ชจ๊ฐ€ ์ปค์ ธ๋„ state๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•จ

 

 

|Getters

  • state๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ํ™œ์šฉํ•˜์—ฌ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ (computed ์†์„ฑ๊ณผ ์œ ์‚ฌ)
    • compute๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ getters๋Š” ์ €์žฅ์†Œ์˜ ์ƒํƒœ(state)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ณ„์‚ฐ
    • ์˜ˆ๋ฅผ ๋“ค์–ด, state์— todoList๋ผ๋Š” ํ•ด์•ผ ํ•  ์ผ์˜ ๋ชฉ๋ก์˜ ๊ฒฝ์šฐ ์™„๋ฃŒ๋œ todo ๋ชฉ๋ก๋งŒ์„ ํ•„ํ„ฐ๋งํ•ด์„œ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Œ
  • computed ์†์„ฑ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ getters์˜ ๊ฒฐ๊ณผ๋Š” **state ์ข…์†์„ฑ์— ๋”ฐ๋ผ ์บ์‹œ(cached)**๋˜๊ณ , ์ข…์†์„ฑ์ด ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ์—๋งŒ ๋‹ค์‹œ ์žฌ๊ณ„์‚ฐ ๋จ
  • getters ์ž์ฒด๊ฐ€ state๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€๋Š” ์•Š์Œ
    • state๋ฅผ ํŠน์ •ํ•œ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๊ตฌ๋ถ„(๊ณ„์‚ฐ)๋งŒ ํ•จ
    • ์ฆ‰, ๊ณ„์‚ฐ๋œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ด

 

 

๐ŸŽˆVuex Core Concepts Summary

  • State
    • ์ค‘์•™์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๋ชจ๋“  ์ƒํƒœ ์ •๋ณด (data)
    • Mutations์— ์˜ํ•ด ๋ณ€๊ฒฝ๋จ
  • Mutations
    • state๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•
    • ๋ฐ˜๋“œ์‹œ ๋™๊ธฐ์  ๋กœ์ง์ด์–ด์•ผ ํ•จ
    • ์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ ํ•ญ์ƒ state๋ฅผ ๋ฐ›๊ณ , Actions์˜ commit()์— ์˜ํ•ด ํ˜ธ์ถœ๋จ
  • Actions
    • Mutations๋ฅผ commit()์œผ๋กœ ํ˜ธ์ถœ
    • ๋น„๋™๊ธฐ ๋กœ์ง ์ž‘์„ฑ ๊ฐ€๋Šฅ
    • ํ•ญ์ƒ context ๊ฐ์ฒด๋ฅผ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ์†์„ฑ์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ์œผ๋‚˜ state๋ฅผ ๋ณ€๊ฒฝํ•ด์„œ๋Š” ์•ˆ๋จ
    • ์ปดํฌ๋„ŒํŠธ์—์„œ dispatch()์— ์˜ํ•ด ํ˜ธ์ถœ๋จ
  • Getters
    • store์˜ ์ƒํƒœ๋ฅผ ๊ธฐ๋ฐ˜ํ•˜๋Š” ๊ณ„์‚ฐ ๊ฐ’
    • ์‹ค์ œ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Œ
    • computed ์†์„ฑ๊ณผ ์œ ์‚ฌ
    •  

๋Œ“๊ธ€