
// Vue
data : {
message : 'Hello Vue,js!'
}
// Vuex
state : {
message : 'Hello Vue,js!'
}
// Vue
<p>{{ message }}</p>
// Vuex
- Vue.use() 로 플러인 추가해서 전체 컴포넌트에서 접근 가능
<p>{{ this.$store.state.message }}</p>
state: {
num : 10
},
getters : {
getNumber(state) {
return state.num;
},
doubleNumber(state){
return state.num * 2;
}
}
<p> {{ this.$store.getters.getNumber }}</p>
// store.js
state: {
num : 10
},
mutations :{
printNumbers(state) {
return state.num;
},
sumNumbers(state){
return state.num + anotherNum;
},
modifyState(state, payload){
console.log(payload.str);
return state.storeNum += payload.num;
}
}
// App.vue
this.$store.commit('printNumbers'); //10
// 두번째 인자로 값을 넘길수 있음.
this.$store.commit('sumNumbers', 20); //30
// 여러 값을 넘기고 싶은 경우 key, val 값으로 넘기면 됨.
this.$store.commit('modifyState', {
str : 'passed from payload',
num : 20
});

// store.js
state: {
num : 10
},
mutations :{
doubleNumber(state) {
state.num * 2;
},
},
actions: {
delayDoubleNumber(context){
// context로 store의 메서드와 속성 접근
// 중간에 비동기 로직을 넣을 수 있음.
context.commit('doubleNumber');
}
}
// App.vue
this.$store.dispatch('delayDoubleNumber'); //20
actions 비동기 코드 ex
// store.js
mutations :{
addCounter(state) {
state.counter++
},
},
actions: {
delayedAddNumber(context){
setTimeout(() => context.commit('doubleNumber'), 2000);
}
}
// App.vue
methods: {
incrementCounter(){
this.$store.dispatch('delayedAddNumber');
}
}
actions 비동기 코드 ex2
// store.js
mutations :{
setData(state, fetchedData) {
state.product = fetchedData;
},
},
actions: {
fetchProductData(context){
return axios.get('http://domain.com/products/1')
.then(response => context.commit('setData', response));
}
}
// App.vue
methods: {
getProduct(){
this.$store.dispatch('fetchProductData');
}
}