๐ค Vuex๋..?
Vue.js ์ ํ๋ฆฌ์ผ์ด์
์ ๋ํ ์ํ ๊ด๋ฆฌ ํจํด + ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- redux์ ๋น์ทํ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ๋ฌด์ํ ๋ง์ ์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ์ ํ๋ฆฌ์ผ์ด์
์ ๋ชจ๋ ์ปดํฌ๋ํธ๋ค์ ๋ํ ์ค์ ์ง์ค์ ์ ์ฅ์์ ์ญํ ๋ฐ ๊ด๋ฆฌ๋ฅผ ๋ด๋น
- ๊ณตํต์ ์ํ๋ฅผ ๊ณต์ ํ๋ ์ฌ๋ฌ ์ปดํฌ๋ํธ๊ฐ ์๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๊ธฐ ์ ํฉ
- ์ธ๋ถ API๋ฅผ ๋ฐ๋ก ๋ถ๋ฌ๋ค ์ฐ๋ ๊ฒ์ด ์๋๋ผ ์ค๊ฐ์์
vuex
์ state์ API ๋ฐ์ดํฐ๋ฅผ ๋ด์์ ์ฌ์ฉ
๐ Vuex๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ์ด์
- ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์
์์ ์ปดํฌ๋ํธ์ ๊ฐ์๊ฐ ๋ง์์ง๋ฉด ์ปดํฌ๋ํธ ๊ฐ์ ๋ฐ์ดํฐ ์ ๋ฌ์ด ์ด๋ ค์
- ๋ฐ์ดํฐ ํต์ ์ ํ๊ณณ์์ ์ค์ ์ง์ค์์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ ์ง๋ณด์ ์ฉ์ด
- ์ํ ์ ๋ณด๊ฐ ๋ณ๊ฒฝ๋๋ ์ํฉ๊ณผ ์๊ฐ์ ์ถ์ ๊ฐ๋ฅ!
- ์ปดํฌ๋ํธ์์ ์ํ ์ ๋ณด๋ฅผ ์์ ํ๊ฒ ์ ๊ทผ ๊ฐ๋ฅ
- ์ปดํฌ๋ํธ ๊ฐ์ ํต์ ์ด๋ ๋ฐ์ดํฐ ์ ๋ฌ์ ์ข ๋ ์ ๊ธฐ์ ์ผ๋ก ๊ด๋ฆฌํ ํ์์ฑ์ด ์์
- ๋ทฐ์ ์ปดํฌ๋ํธ ๋ฐฉ์์ธ props, event emit ๋๋ฌธ์ ์ค๊ฐ์ ๊ฑฐ์ณ์ผํ ์ปดํฌ๋ํธ๊ฐ ๋ง์์ง๊ฑฐ๋ ์ด๋ฅผ ํผํ๊ธฐ ์ํด Event Bus๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ ๊ฐ ๋ฐ์ดํฐ ํ๋ฆ์ ํ์
ํ๊ธฐ ์ด๋ ค์ด ๋ฌธ์ ์ ๋ฐ์
- ์ํ ๊ด๋ฆฌ ๋ฐ ํน์ ๊ท์น ์ ์ฉ๊ณผ ๊ด๋ จ๋ ๊ฐ๋
์ ์ ์ํ๊ณ ๋ถ๋ฆฌํจ์ผ๋ก์จ ์ฝ๋์ ๊ตฌ์กฐ์ ์ ์ง ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ํฅ์
Vuex ๊ตฌ์กฐ
Action
- ๋น๋๊ธฐ ํธ์ถ(Backend API)์ ๋ชจ๋
Action
์์ ํธ์ถ
dispatch('ํจ์๋ช
', '์ ๋ฌ์ธ์')
๋ฐฉ์์ผ๋ก ํธ์ถ
๋น๋๊ธฐ
์ฒ๋ฆฌ ๊ธฐ์ค
action: {
ActionName(context) {
๋น๋๊ธฐํธ์ถ()
.then(res => {
context.commit('MutationName', data);
})
.catch(err => {
});
}
}
export default {
created() {
this.$store.dispatch('ActionName');
}
}
Mutations
- ๋น๋๊ธฐ ํธ์ถ๋ก ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ State์ ๋ด์
- State ๋ณ๊ฒฝ์ ๋ด๋น (๋ฐ๋์ Mutation์ ํตํด์๋ง State๋ฅผ ๋ณ๊ฒฝํด์ผํจ)
commit('ํจ์๋ช
', '์ ๋ฌ์ธ์')
๋ฐฉ์์ผ๋ก ํธ์ถ
๋๊ธฐ
์ฒ๋ฆฌ ๊ธฐ์ค
mutation: {
MutationName(state, data) {
state.dataName = data;
}
}
State
- ๊ณตํต์ผ๋ก ์ฐธ์กฐํ๊ธฐ ์ํ ๋ณ์๋ฅผ ์ ์ํ ๊ฒ
- ํ๋ก์ ํธ์ ๋ชจ๋ ๊ณณ์์ ์ด๋ฅผ ์ฐธ์กฐํ๊ณ ์ฌ์ฉ ๊ฐ๋ฅ
- ๋ชจ๋ ์ปดํฌ๋ํธ๋ค์์ ๊ณตํต๋ ๊ฐ์ ์ฌ์ฉ ๊ฐ๋ฅ
state: {
dataName: ์ด๊ธฐ๊ฐ,
}
Getters
- vue์ computed์ ๋์ผ์์ฑ์ธ๋ฐ ๋ค๋ง store์ ์๋ ๊ฒ
- ์ฌ๋ฌ ์ปดํฌ๋ํธ์์ ๋์ผํ computed๊ฐ ์ฌ์ฉ๋ ๊ฒฝ์ฐ Getters์ ์ ์ ํ ์ฌ์ฉ
getters: {
computedName(state) {
return state.dataName
}
}
import { mapGetters } from 'vuex';
export default {
computed: {
...mapGetters([
'computedName'
])
}
}