λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
[개발] Practice/Vue.js

[Vue.js] Vuex3: actions ν•­λͺ© μ‚¬μš©ν•˜κΈ°

by Connecting-the-dots 2022. 4. 8.
728x90
λ°˜μ‘ν˜•

πŸ’‘ μ‹€μŠ΅ 포인트!

πŸ’œ λ“€μ–΄κ°€κΈ° 전에

  • Vue μ—μ„œλŠ” state λ₯Ό μˆ˜μ •ν•  λ•Œ mutations 에 ν•¨μˆ˜λ₯Ό λ§Œλ“  ν›„, 이λ₯Ό μ΄μš©ν•΄μ„œ μˆ˜μ •ν•˜λŠ” 것이라고 κ³΅λΆ€ν–ˆλ‹€.
  • ν•˜μ§€λ§Œ, μ„œλ²„μ—μ„œ 데이터λ₯Ό 가져와 μˆ˜μ •ν•˜κ³  싢을 λ•Œμ—λŠ” actions λΌλŠ” ν•­λͺ©μ„ λ§Œλ“  ν›„, μ—¬κΈ°μ—μ„œ μ„œλ²„λ‘œ ajax μš”μ²­μ„ ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.
  • μ™œλƒν•˜λ©΄ mutations ν•­λͺ©μ— ν•¨μˆ˜λ₯Ό λ§Œλ“€ λ•Œ, 내뢀에 ajax 와 같이 μƒλŒ€μ μœΌλ‘œ μ‹œκ°„μ΄ 였래 κ±Έλ¦¬λŠ” μ½”λ“œλ₯Ό μ μ–΄λ†“μœΌλ©΄, JavaScript κ°€ μ΄λ ‡κ²Œ μ‹œκ°„μ΄ 였래 κ±Έλ¦¬λŠ” μ½”λ“œλŠ” μ œμ³λ‘κ³  λ‹€μŒ 쀄뢀터 μ‹€ν–‰ν•˜λ €λŠ” κ²½ν–₯이 μžˆμ–΄μ„œ μ˜λ„ν•˜μ§€ μ•Šμ€ 버그가 λ°œμƒν•  수 있기 λ•Œλ¬Έμ΄λ‹€.
  • λ”°λΌμ„œ, state λ₯Ό μˆ˜μ •ν•˜λŠ” μš©λ„λ‘œλ§Œ mutations ν•­λͺ©μ„ μ‚¬μš©ν•˜κ³ , ajax 와 같이 μ‹œκ°„μ΄ 였래 κ±Έλ¦¬λŠ” μ½”λ“œλŠ” actions ν•­λͺ©μ„ μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€.

πŸ’œ actions λ§Œλ“€μ–΄ μ‚¬μš©ν•˜κΈ°

const store = createStore({
  state(){
    return {
    // state μž‘μ„±
    }
  },
  mutations: {
  // state λ³€κ²½ ν•¨μˆ˜ μž‘μ„±
  },
  actions: {
  // μ‹œκ°„μ΄ 였래 κ±Έλ¦¬λŠ” ν•¨μˆ˜ μž‘μ„±
    getData(){
      axios.get('').then(()=>{
      	// GET μš”μ²­ 성곡할 경우 μ‹€ν–‰ν•  μ½”λ“œ
      }).catch(()=>{
      	// GET μš”μ²­ μ‹€νŒ¨ν•  경우 μ‹€ν–‰ν•  μ½”λ“œ
      })
    }
  },
})
  • mutations ν•­λͺ©μ„ λ§Œλ“€ λ•Œμ²˜λŸΌ actions ν•­λͺ©μ„ λ§Œλ“€κ³ , κ·Έ μ•ˆμ— ν•¨μˆ˜ν˜•νƒœλ‘œ μž‘μ„±ν•΄μ£Όλ©΄ λœλ‹€.
  • 이제 λ‹€λ₯Έ vue νŒŒμΌμ—μ„œ $store.dispatch('getData') 와 같이 actions ν•­λͺ© λ‚΄μ˜ νŠΉμ • ν•¨μˆ˜λ₯Ό 뢈러였면 vue 파일둜 데이터λ₯Ό κ°€μ Έλ‹€ μ€€λ‹€.

 

const store = createStore({
  state(){
    return {
    // state μž‘μ„±
    }
  },
  mutations: {
  // state λ³€κ²½ ν•¨μˆ˜ μž‘μ„±
  },
  actions: {
  // μ‹œκ°„μ΄ 였래 κ±Έλ¦¬λŠ” ν•¨μˆ˜ μž‘μ„±
    getData(context){
      axios.get('').then(()=>{
      	// GET μš”μ²­ 성곡할 경우 μ‹€ν–‰ν•  μ½”λ“œ
        context.commit('mutations_ν•­λͺ©_λ‚΄μ˜_ν•¨μˆ˜λͺ…', 전솑할_데이터) 
      }).catch(()=>{
      	// GET μš”μ²­ μ‹€νŒ¨ν•  경우 μ‹€ν–‰ν•  μ½”λ“œ
      })
    }
  },
})
  • λ§Œμ•½μ— actions λ‚΄μ˜ ν•¨μˆ˜μ—μ„œ state 변경도 같이 ν•˜κ³  μ‹Άλ‹€λ©΄ μœ„μ™€ 같은 ν˜•νƒœλ‘œ μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ•Ό ν•œλ‹€.
  • μ™œλƒν•˜λ©΄ state λ₯Ό λ³€κ²½ν•  λ•Œμ—λŠ” 무쑰건 mutations λ‚΄μ˜ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.
  • λ˜ν•œ mutations λ‚΄μ˜ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•  λ•Œμ—λŠ” commit() 을 μ‚¬μš©ν•˜λ©°, 이λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄ ν•¨μˆ˜μ— νŒŒλΌλ―Έν„°λ₯Ό ν•˜λ‚˜ μΆ”κ°€ν•΄μ„œ νŒŒλΌλ―Έν„°λͺ….commit() κ³Ό 같이 μ‚¬μš©ν•œλ‹€.
    (보톡 μ΄λ•Œμ— κ΄€μŠ΅μ μœΌλ‘œ context λΌλŠ” νŒŒλΌλ―Έν„°λ₯Ό μ‚¬μš©ν•œλ‹€.)
  • commit() μ•ˆμ—λŠ” mutations ν•­λͺ© λ‚΄μ˜ ν•¨μˆ˜λͺ…을 적어주고, λ§Œμ•½ μ „μ†‘ν•˜κ³  싢은 데이터가 있으면 commit() μ•ˆμ— λ‘λ²ˆμ§Έ νŒŒλΌλ―Έν„°λ‘œ 전솑할 데이터λ₯Ό λ„£μ–΄μ£Όλ©΄ λœλ‹€.

 

728x90
λ°˜μ‘ν˜•