๐ Vue์ ๋ํ ์ดํด๊ฐ ์๋ค๋ ๊ฐ์ ํ์ ์ ๋ฆฌ๋ ์๋ฃ์
๋๋ค.
๐ ๊ณต์ ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ ๋ด์ฉ์
๋๋ค. ์์ธํ ๋ด์ฉ์ ๊ณต์ ์ฌ์ดํธ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์ ๐
๐ Vuex์ ๋ชจ๋์ ๋ณธ ์ฅ์์ ๋ค๋ฃจ์ง ์์ต๋๋ค.
1. Vuex๋ ๋ญ๊น?
- ์ํ ๊ด๋ฆฌ + ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ์ํ ๊ด๋ฆฌ?
- Vue์ 3๊ฐ์ง ๊ธฐ๋ฅ: data, template, methods
- state = data : ์ฑ์ ์๋ํ๋ ์๋ณธ ์์ค, ์กฐ์ํ๊ณ ์ ํ๋ ๋ฐ์ดํฐ
- view: ์ํ์ ์ ์ธ์ ๋งคํ. ์ฌ์ฉํ data๋ฅผ ์ ์ธํ๋ ๊ณณ
- methods: data๋ฅผ ์ค์ ๋ก ์กฐ์ํ๋ ๊ณณ
- ์ํ ๊ด๋ฆฌ?
- Components ๊ฐ ๋ง์ด ์ฌ์ฉํ๋ data(state)๋ฅผ ์ค์ ์ง์ค ์ ์ฅ์์์ ๊ด๋ฆฌํ๊ธฐ ์ํ ์ญํ
new Vue({
// 1. ์ํ = data
data(){
return {
a: 0
};
}
// 2. View = html element
template: `
<div> {{a}} </div>
`
// 3. Action = data ์กฐ์๊ณผ ๊ฐ์ ํจ์
methods: {
doubleA() {
this.a *= 2
}
}
});
2. Vuex ๋ฑ์ฅ ์ด์
- Vue๋ ์ปดํฌ๋ํธ ๊ฐ ๋จ๋ฐฉํฅ ํต์ ์ ์ ๊ณตํ๋ค.
- ์์์์ ํ์๋ก๋ง ๋ฐ์ดํฐ ์ ๋ฌ์ด ๊ฐ๋ฅํ๋ค. (props)
- ํ์์์ ์์๋ก ๋ฐ์ดํฐ ์ ๋ฌ์ ํ ๋๋ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํจ๋ค. ($emit)
โ ๋ฐ์ดํฐ์ ์ผ๊ด์ ํ๋ฆ์ ๋ณด์ฅํ ์ ์๋ค.
3. Vuex
โ store๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ์ ์ผ๊ด์ ํ๋ฆ์ ๋ณด์ฅํ๋ค.
- store: ์ ํ๋ฆฌ์ผ์ด์ ์ํ(๋ฐ์ดํฐ)๋ฅผ ๋ณด๊ดํ๊ณ ์๋ ์ปจํ ์ด๋
- ๋๊ธฐ์ , ๋น๋๊ธฐ์ ์ผ๋ก ์ํ์ ๋์ํ ์ ์๋ค. (=๋ฐ์ํ)
- ์ ์ฅ์ ์ฝ๋ ์์
const store = new Vuex.store({
state: {
stored_data: 0
},
mutations: {
update_stored_data(state) {
stored_data++;
}
}
});
store.commit('update_stored_data');
console.log(store.state.stored_data);
4. Vuex ๊ตฌ์ฑ
1) State
- ๋จ์ผ ์ํ ํธ๋ฆฌ ์ฌ์ฉ
- ์ปดํฌ๋ํธ์์ ๋ง์ด ์ฐธ์กฐ๋๋ data๊ฐ ์ ์ธ๋์ด ์๋ค.
- Vuex store์์ ์ปดํฌ๋ํธ์ ์ฌ์ฉ๋๋ state(data)๋ฅผ ํ๋์ ํ์ธ ๊ฐ๋ฅํ๋ค.
- ๋จ์ผ ํธ๋ฆฌ ํํ๋ก ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
- mutations์ ์ ์๋ method์ ์ํด ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค.
- ๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ mutations์ method๋ฅผ ํธ์ถํ๋ค. (๋๋ฌธ์๋ก ์์ฑ, ๊ตฌ๋ถ์ ์ํด)
- ์ปดํฌ๋ํธ์์ ์ง์ ๋ณ๊ฒฝ โ
- actions์ method๋ฅผ ํธ์ถํ๋ ๊ฒ์ dispatch๋ผ๊ณ ํ๋ค.
- ๋น๋๊ธฐ์ ์ฒ๋ฆฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ actions์ method๋ฅผ ํธ์ถํ๋ค.
2) Getters
- state์ ์กฐ์์ด ํ์ํ ๊ฒฝ์ฐ getters๋ฅผ ํธ์ถํ๋ค. (filter์ ์ญํ )
- ์ค์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ์ผ์ด๋๋ ๊ฒ์ ์๋๋ค.
- ์ธ์๋ก state๊ฐ ์ฃผ์ด์ง๋ค.
3) Mutations
- ์ ์ฅ์์ ์ ๊ทผํ์ฌ state(๋ฐ์ดํฐ)๋ฅผ ๋ณ๊ฒฝํ๋ค.
- ์ธ์๋ก state๊ฐ ์ฃผ์ด์ง๋ค.
4) Actions
- ๋น๋๊ธฐ์ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๋ค.
- state๋ฅผ ์ง์ ์ ๊ทผํ์ง ์๊ณ state ๋ณ๊ฒฝ์ด ํ์ํ ๊ฒฝ์ฐ mutations์ ๊ฑฐ์น๋ค.
- mutations์ ์ ๊ทผํ๊ณ ์ ํ ๋, context.commit(mutations ์ด๋ฆ)์ ํธ์ถํ๋ค.
- ์ธ์๋ก context๊ฐ ์ฃผ์ด์ง๋ค.
5) Helper
- mutations, getters, actions, state์ ์ ์ธ์ ์๋ตํ๊ณ ๊น๋ํ๊ฒ ์ ๊ทผํ๊ธฐ ์ํ ๋ฐฉ์
- mapState, mapGetters, mapMutations, mapActions๊ฐ ์๋ค.
- ES6์ SpreadOperator์ ์ฌ์ฉํ๋ค.
- spread ์ฐ์ฐ์๋ ํน์ ๊ฐ์ฒด ๋๋ ๋ฐฐ์ด์ ๋ค๋ฅธ ๊ฐ์ฒด๋ ๋ฐฐ์ด๋ก ๋ณต์ ํ๊ธฐ ์ํ ๊ฒ
let obj1 = {
a: 5, b: 10
};
let obj2 = {...obj1, c: 20};
6) ์ฝ๋
// store/index.js
const store = new Vuex.Store({
state: {
data: 0
},
mutations: {
UPDATE_DATA(state) {
data++;
}
},
actions: { // ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ด๋น
update_data(context) {
// ๋น๋๊ธฐ ์ฒ๋ฆฌ ํ...
// ๋ฐ์ดํฐ setting
context.commit('UPDATE_DATA');
}
},
getters: {
append_to_data(state) {
return "value: " + state.data;
}
}
});
// xxx.vue
...
<script>
import { mapState, mapMutations, mapGetters, mapActions } from "vuex";
export default {
name: "",
data() {
return {};
},
computed: {
...mapState(["data"]),
...mapGetters(["append_to_data"]),
...
},
methods: {
...mapActions(["update_data"]),
...mapMutations(["UPDATE_DATA"])
}
}
</script>
API ๋ฌธ์: https://v3.vuex.vuejs.org/kr/โ
๐ญ ์๋ชป๋ ๋ด์ฉ์ด ์๋ค๋ฉด ํผ๋๋ฐฑ ๋ถํ๋๋ฆฝ๋๋ค ๐
๋๊ธ