Vuex λ?
Vue.js μ μν κ΄λ¦¬λ₯Ό μν ν¨ν΄μ΄μ λΌμ΄λΈλ¬λ¦¬μ΄λ€. λͺ¨λ μ»΄ν¬λνΈμ λν μ€μ μ§μ€μ μ μ₯μ μν μ νλ©° μμΈ‘ κ°λ₯ν λ°©μμΌλ‘ μνλ₯Ό λ³κ²½ν μ μλ€.
Vuex λ₯Ό μ¬μ©νμ§ μμ κ²½μ°
μ»΄ν¬λνΈ κΈ°λ° νλ μμν¬λ ν νλ©΄μ μμ λ¨μμ μ»΄ν¬λνΈ μ¬λ¬ κ°λ‘ μͺΌκ°μ΄ ꡬμ±νλ€. μλ₯Ό λ€μ΄, λ·°μμλ μ»΄ν¬λνΈ κ° λ°μ΄ν° μ λ¬μ μν΄ emit, props λ±μ μ¬μ©νλλ° μ¬κΈ°μ λͺ κ°μ§ λ¬Έμ μ μ΄ μλ€.
- λ°μ΄ν°μ μμ§μμ νμΈν μ μλ€.
- λΆλͺ¨-μμ μ»΄ν¬λνΈμ κ΄κ³κ° 볡μ‘ν΄μ§λ©΄ λ°μ΄ν°μ μ΄λμ νμ νκΈ° μ΄λ ΅λ€.
- μ»΄ν¬λνΈλ‘λΆν° λ°μ΄ν°λ₯Ό μ λ¬λ°κΈ° μν΄ μ€κ°μ κ±°μ³μΌ ν μ»΄ν¬λνΈκ° λ§μμ§λ€.
λ¨Όμ , μμ μ»΄ν¬λνΈμ κΉμ΄μ λ°λΌ props, emit μ μκ° λ§μμ§λ©° κ΄λ¦¬μ μ΄λ €μμ΄ μκΈ΄λ€. κ²λ€κ° λΆλͺ¨-μμ κ΄κ³κ° μλ λ€λ₯Έ μ»΄ν¬λνΈμκ² κ°μ μ λ¬ν μ μλ€. vue μμλ μ΄ λ¬Έμ μ μ ν΄κ²°νκΈ° μν λ°©λ²μΌλ‘ event bus μ vuex λ₯Ό μ΄μ©νλ λ°©λ²μ μ μνλ€. λ λ°©λ²μ μ°¨μ΄μ μ vuex λ μν κ΄λ¦¬μ μΆμ μ΄ κ°λ₯νλ€λ κ²μ΄λ€. event bus λ μ΄λμ μ΄λ²€νΈλ₯Ό 보λκ³ λ°μλμ§ μκΈ° μ΄λ €μ μ λ¬μ΄ λͺ μμ μ΄μ§ μλ€.
μν κ΄λ¦¬λ μ νμν κΉ?
μμ λ¨μλ‘ κ΅¬μ±λ μ¬λ¬ κ°μ μ»΄ν¬λνΈκ° μ΄λ»κ² ν΅μ νκ³ μ΄λ€ λ°μ΄ν°λ₯Ό μ λ¬νλμ§ μ½κ² νμ νλ €λ©΄ μ΄λ₯Ό ν κ³³μμ κ΄λ¦¬νλ ν¨ν΄μ΄ νμνλ€. Vue μμλ vuex λΌλ μν κ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ¬ λ°μ΄ν° μ λ¬κ³Ό μ΄λ²€νΈ ν΅μ μ ν κ³³μμ κ΄λ¦¬νλ€.
Vuex νΉμ§
μ¬λ¬ μ»΄ν¬λνΈκ° 곡μ νλ λ°μ΄ν°λ₯Ό ν κ³³μ μ μ₯νλ μ€μ μ§μ€μ store μ μ μ₯μμ μνκ° λ³κ²½λλ©΄ ν¨μ¨μ μΌλ‘ λμνκ³ μ λ°μ΄νΈνλ λ°μνμ νΉμ§μ κ°μ§λ€. μ μ₯μμ μνλ μ§μ λ³κ²½ν μ μκ³ μ»€λ°μ μ΄μ©ν΄ λͺ¨λ μνμ λν΄ μΆμ κ°λ₯ν κΈ°λ‘μ λ¨κΈ΄λ€.
- μ€μ μ§μ€μ μ μ₯μ
- λ°μν μ μ₯μ μν
- 컀λ°μ μ΄μ©ν λ³μ΄
Vuex ν¨ν΄
Vuex λ React μ Flux ν¨ν΄μμ κΈ°μΈνμλ€. Flux ν¨ν΄μ MVC ν¨ν΄μ μλ°©ν₯ λ°μ΄ν° νλ¦μ νΉμ§κ³Όλ λ€λ₯΄κ² λ¨λ°©ν₯ λ°μ΄ν° νλ¦μ΄λ€.
- actions: νλ©΄μμ λ°μνλ μ΄λ²€νΈ λλ μ¬μ©μμ μ λ ₯
- dispatcher: λ°μ΄ν°λ₯Ό λ³κ²½νλ λ°©λ², method, model μ λ°κΎΈκΈ° μν μν
- model: νλ©΄μ νμν λ°μ΄ν°
- view: μ¬μ©μμκ² λ³΄μ΄λ νλ©΄, νλ©΄μμ λ€μ action μ νΈμΆ
Vuex μμ
βοΈ State (μν)
μ¬λ¬ μ»΄ν¬λνΈκ° 곡μ ν λ°μ΄ν°
state λ mutation μ ν΅ν΄μλ§ λ³κ²½νλ κ²μ κΆμ₯
μ»΄ν¬λνΈμμλ this.$store.state.μνλͺ μΌλ‘ μ¬μ©
// Vue
data: {
message: 'Hello Vue.js'
}
// Vuex
state: {
message: 'Hello Vue.js'
}
// Vue
<p>{{ message }}</p>
// Vuex
<p>{{ this.$store.state.message }}</p>
βοΈ Actions
λΉλκΈ° μ²λ¦¬ λ‘μ§μ μ μΈνλ λ©μλ
λ°μ΄ν° μμ², Promise, async λ±κ³Ό κ°μ λΉλκΈ° μ²λ¦¬ μ μΈ
api νΈμΆκ³Ό κ·Έ κ²°κ³Όμ λν΄ return λ° mutations λ₯Ό μ¬μ©
μ»΄ν¬λνΈμμλ this.$store.dispatch('μ‘μ λͺ ') μΌλ‘ μ¬μ©
// store.js
state: {
num: 10
},
mutations: {
doubleNumber(state) {
state.num * 5;
}
},
actions: {
delayDoubleNumber(context) { # contextλ‘ storeμ λ©μλμ μμ± μ κ·Ό
context.commit('doubleNumber'); # νΈλ¦¬κ±°
}
}
// App.vue
this.$store.dispatch('delayDoubleNumber');
βοΈ Mutations (λ³μ΄)
state μ κ°μ λ³κ²½ν μ μλ μ μΌν λ°©λ²
λκΈ°μ μΌλ‘ μνλ¨
μ»΄ν¬λνΈμμλ this.$store.commit('λ³μ΄λͺ ') μΌλ‘ μ¬μ©
// store.js
state: {
num: 10
},
mutations: {
printNumbers(state) {
return state.num;
},
sumNumbers(state, anotherNum) {
return state.num + anotherNum;
}
}
// App.vue
this.$store.commit('printNumbers'); //10
this.$store.commit('sumNumbers', 20); //30
βοΈ Getters/Computed
state κ°μ μ κ·Όνλ μμ±μ΄μ computed() μ²λΌ 미리 μ°μ°λ κ°μ μ κ·Όνλ μμ±
state μ λν μ°μ°μ νκ³ κ·Έ κ²°κ³Όλ₯Ό view μ λ°μΈλ©ν¨
// 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>
// ν¬νΌν¨μλ‘ state μ κ·Όνλ λ²μ κ°μνν μ μμ
μ°Έκ³ μλ£ λ° μΆμ² πβοΈ
http://www.incodom.kr/VueJS/Vuex
https://dev-jsk.tistory.com/75
'κ°λ° > Vue.js' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Vue μλͺ μ£ΌκΈ° (0) | 2022.04.13 |
---|---|
Vue3 Composition API (0) | 2022.04.06 |
Vue λΌμ°ν° / SPA / Router κ° μ λ¬ (0) | 2022.04.04 |
Vue μ»΄ν¬λνΈ / μ»΄ν¬λνΈ κ° ν΅μ (0) | 2022.04.04 |
Vue μ¬μ©λ² / λ¬Έλ² / μ΅μ / λλ ν°λΈ (0) | 2022.03.28 |
λκΈ