Vue 11-1 Vuex Project ๊ฐœ๋…

Seungju Hwangยท2021๋…„ 1์›” 23์ผ
0

Vue

๋ชฉ๋ก ๋ณด๊ธฐ
15/18
post-thumbnail

Intro

Vuex๋ฅผ ํ™œ์šฉํ•˜์—ฌ TodoList๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด vuex์— ๋Œ€ํ•œ ๊ฐœ๋…๋ถ€ํ„ฐ ์•Œ์•„๋ด…์‹œ๋‹ค

์ปดํฌ๋„ŒํŠธ ๋ ˆ์ด์•„์›ƒ


๐Ÿ”ต Vuex

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

๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„

Vue.js์—์„œ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์˜ ๊ธฐ๋ณธ ์ปจ์…‰์€ ๋ถ€๋ชจ์—๊ฒŒ ์ž์‹์œผ๋กœ ํ๋ฅด๋Š” ๋‹จ๋ฐฉํ–ฅ์ž…๋‹ˆ๋‹ค. ์•ž์„œ ๊ณต๋ถ€ํ–ˆ์–ด์š”.

  • ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์„ ๋ช…ํ™•ํ•˜๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ณ  ์ด๋ฅผ ์ œ์–ดํ•˜๊ธฐ ์‰ฌ์›Œ์ง„๋‹ค.
  • ์ด๋•Œ ๊ฐ ์ปดํฌ๋„ŒํŠธ์—์„œ ๊ณต์œ ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ƒํƒœ๋Š” ์–ด๋–ค ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ ๋™์ผํ•œ ์ƒํƒœ๋ฅผ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.
  • ์ƒํƒœ๋ฅผ ๋™๊ธฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์œ„&์•„๋ž˜๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฐ˜๋ณต์ ์ธ ์ฝ”๋“œ์™€ ๋ณต์žกํ•˜๊ณ  ๋ถˆํ•„์š”ํ•œ ๋กœ์ง์ด ๋ฐœ์ƒํ•œ๋‹ค.

โžก ๊ฐ„๋‹จํ•˜๊ฒŒ ์ „์—ญ์—์„œ ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๊ด€๋ฆฌํ•˜๋Š” Store๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒŒ vuex์ด๋‹ค!

์ค‘์•™ ์ง‘์ค‘ ์ €์žฅ์†Œ

์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งŽ๊ณ  ์ปดํฌ๋„ŒํŠธ๊ฐ„ ๊ณต์œ ํ•˜๋Š” ์ƒํƒœ ์ •๋ณด๊ฐ€ ๋งŽ์•„์ง€๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ ์ค‘์•™์—์„œ ๊ด€๋ฆฌํ•˜๋„๋ก ํ•œ๋‹ค.

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

๐Ÿ”ต Vuex Core Concept

Vuex๋Š” ๋ฌด์กฐ๊ฑด ๋„์ž…ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ํ•„์š”ํ•œ ์ˆœ๊ฐ„์— ์ ์ ˆํ•œ ํŒ๋‹จ์„ ํ†ตํ•ด ๊ฒฐ์ •ํ•ด์•ผํ•œ๋‹ค. ์ค‘๋Œ€ํ˜• ์ด์ƒ์˜ SPA์—์„œ ์“ฐ๋Š”๊ฒŒ ์ข‹์•„๋ณด์ธ๋‹ค.

State

์ค‘์•™์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๋ชจ๋“  ์ƒํƒœ ์ •๋ณด, ์ฆ‰ Data๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

  • Mutation์— ์ •์˜๋œ ๋ฉ”์„œ๋“œ์— ์˜ํ•ด ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.
  • '์ค‘์•™ ์ง‘์ค‘์‹ ๊ด€๋ฆฌ'๋ผ๋Š” ๊ฑด Vue.js๋กœ ๋งŒ๋“  ์„œ๋น„์Šค ๋‚ด๋ถ€์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ์ƒํƒœ๋ฅผ ํ•œ ๊ณณ์— ๋ชจ์•„์„œ ๊ด€๋ฆฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • state๊ฐ€ ๋ณ€ํ™”ํ•˜๋ฉด ํ•ด๋‹น state ์ •๋ณด๋ฅผ ๊ณต์œ ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์˜ DOM์€ Re-rendering๋ฉ๋‹ˆ๋‹ค.

Vue components

  • Dispatch๋ฅผ ์‚ฌ์šฉํ•ด Actions๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
  • Vuex Store์—์„œ state ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•œ๋‹ค.

Actions

Backend API์™€ ํ†ต์‹ ํ•˜์—ฌ data fetching ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  • ์œ„์˜ ๊ณผ์ •์—์„œ ๋™๊ธฐ์ ์ธ ์ž‘์—… ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋น„๋™๊ธฐ์ ์ธ ์ž‘์—…์„ ํฌํ•จํ•œ๋‹ค. ๋”ฐ๋ผ์„œ state๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๊ฑด ๋น„๋™๊ธฐ์ ์ธ ์ž‘์—… ๊ณผ์ •์—์„œ state์˜ ์ƒํƒœ๊ฐ€ ์˜ˆ์ƒํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • Vue components์—์„œ dispatch ๋ฉ”์„œ๋“œ์— ์˜ํ•ด ํ˜ธ์ถœ๋œ๋‹ค.
  • ํ•ญ์ƒ context๊ฐ€ ์ธ์ž๋กœ ๋„˜์–ด์˜จ๋‹ค. ์ด๋ฆ„์ด context์ธ ์ด์œ ๋Š” ํ•ด๋‹น ๊ฐ์ฒด๋Š” ๋ชจ๋“  Vuex ์š”์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•  ์ฝ”๋“œ์—์„œ store.js ํŒŒ์ผ ๋‚ด์— ์žˆ๋Š” ๋ชจ๋“  ์š”์†Œ์— ์ ‘๊ทผํ•˜์—ฌ ์†์„ฑ ์ ‘๊ทผ&๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ํ•˜์ง€๋งŒ,, state๋ฅผ ์ง์ ‘๋ณ€๊ฒฝํ•˜์ง„ ์•Š๋Š”๋‹ค. mutations์— ์ •์˜๋œ ๋ฉ”์„œ๋“œ๋ฅผ commmit ๋ฉ”์„œ๋“œ๋กœ ํ˜ธ์ถœํ•œ๋‹ค.

โžก โญstate๋Š” ์˜ค๋กœ์ง€ mutations ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์กฐ์ž‘ํ•œ๋‹ค. ๐Ÿ’ฅ ๋ช…ํ™•ํ•œ ์—ญํ•  ๋ถ„๋‹ด์„ ํ†ตํ•ด ์„œ๋น„์Šค ๊ทœ๋ชจ๊ฐ€ ์ปค์ ธ๋„ state๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.

Mutations

Vuex ์ €์žฅ์†Œ์—์„œ ์ƒํƒœ๋ฅผ ์œ ์ผํ•˜๊ฒŒ ๋ณ€ํ™”์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•

  • Actions์—์„œ commit๋ฉ”์„œ๋“œ์— ์˜ํ•ด ํ˜ธ์ถœ๋œ๋‹ค.
  • state๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ๋•Œ๋ฌธ์— mutations์— ์ •์˜๋˜๋Š” ๋ฉ”์„œ๋“œ์˜ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ state๊ฐ€ ๋„˜์–ด์˜จ๋‹ค.
  • ๊ฐ€์žฅ ํ•ต์‹ฌ์ธ state๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋กœ์ง์ด ๋‹ด๊ธฐ๊ธฐ ๋•Œ๋ฌธ์— ๋™๊ธฐ์ ์ธ ์ฝ”๋“œ๋งŒ ์ž‘์„ฑํ•œ๋‹ค.
  • ์ง๊ด€์ ์œผ๋กœ state๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณ€๊ฒจ์˜ค๋””๋Š” ์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ ๋น„๋™๊ธฐ์ ์ธ ๋กœ์ง์ด ์ˆ˜ํ–‰๋˜๋ฉด state๊ฐ€ ๋ณ€ํ™”ํ•˜๋Š” ์‹œ์ ์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ด€๋ฆฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ด์ง„๋‹ค..

Getters

state๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ํ™œ์šฉํ•˜์—ฌ ๊ณ„์‚ฐํ•œ ๋ฐ์ดํ„ฐ ๋˜๋Š” ์ƒํƒœ. ๋”ฐ๋ผ์„œ ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋กœ state๊ฐ€ ๋„˜์–ด์˜จ๋‹ค.

  • Vue์˜ computed์™€ ๊ฑฐ์˜ ๋™์ผํ•˜๋‹ค.
  • ์‹ค์ œ ๊ณ„์‚ฐ๋œ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ getters๋Š” ์ €์žฅ์†Œ์˜ state๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ณ„์‚ฐํ•œ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด, state์— todo list์˜ ํ•ด์•ผํ•  ์ผ์˜ ๋ชฉ๋ก์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž. todo๊ฐ€ ์™„๋ฃŒ๋œ ๋ชฉ๋ก๋งŒ filteringํ•ด์„œ ๋ณด์—ฌ์ค˜์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ getters์—์„œ .filter array helper๋ฅผ ์‚ฌ์šฉํ•ด completed์˜ ๊ฐ’์ด true์ธ ์š”์†Œ๊ฐ€ ํ•„ํ„ฐ๋ง ๋˜์„œ ๊ณ„์‚ฐ๋œ ๊ฐ’์„ ๋‹ด์•„ ๋†“๋Š”๋‹ค.

๐Ÿ’ฅ ์—ฌ๊ธฐ์„œ ํ•ต์‹ฌ์€ getters์ž์ฒด๊ฐ€ state๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋‹จ์ˆœํ•˜๊ฒŒ state๋ฅผ ํŠน์ •ํ•œ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๊ตฌ๋ถ„ ๋˜๋Š” ๊ณ„์‚ฐํ•œ ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค get ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

modules

Vuex ๋‚ด๋ถ€์˜ ์š”์†Œ๊ฐ€ ์ปค์ ธ ์ด๋ฅผ ๋‹ค์‹œ ๋ชจ๋“ˆํ™” ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.



profile
๊ธฐ๋กํ•˜๋Š” ์Šต๊ด€์€ ์‰ฝ๊ฒŒ ๋ฌด๋„ˆ์ง€์ง€ ์•Š์•„์š”.

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