데이터를 store에 저장하고, 프로젝트 전체에서 사용할 수 있도록 해주는 것이 Vuex이다.
npm install vuex@next --save
import {createStore} from 'vuex'
const store = createStore ({
state(){
return {
user: {}
}
},
mutations:{
user(state, data){
state.user = data;
}
},
plugins: [
persistedstate({
paths: ['user']
})
]
});
export default store;
store.js에 있는 state 꺼내쓰는 방법은 간단하다. $store.state.데이터명을 사용하면 된다.
<p>안녕 나는 {{ $store.state.name }}야.</p>
//Vue
data: {
message: 'Hello Vue js'
}
//Vuex
state: {
messgge:'Hello Vue.js'
}
//Vue
<p>{{message}}</p>
//Vuex
<p>{{this.$store.state.message}}</p>
//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>
//store.js
state: {num:10},
mutations: {
printNumber(state){
return state.num
},
sumNumbers(state, anotherNum){
return state.num + anotherNum;
}
}
//App.vue
this.$store.commit('printNumber');
this.$store.commit('sumNumbers', 20);
//store.js
state: {storeNum: 10},
mutations: {
modifyState(state, payload){
console.log(payload.str);
return state.storeNum += payload.num;
}
}
//App.vue
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');