Written by
최태열
on
on
Vuex
Vuex란?
Vue의 상태 관리 라이브러리다.
중앙에 데이터 저장소를 두고 애플리케이션 내의 모든 컴포넌트들이 해당 저장소를 이용한다. 즉, 부모 자식관계의 데이터 전송이나 eventBus를 통한 데이터 전송을 하지 않을 수 있다.
Vuex 설치
$npm install vuex --save
해당 프로젝트에 install 한다.
Vuex 사용
VuexStore.js
import Vuex from 'vuex'
import Vue from 'vue'
Vue.use(Vuex) //Vuex 사용을 위한 설정
export default new Vuex.Store({
//데이터(상태, model) - 컴포넌트 간에 공유하는 데이터 선언
state : {
counter: 0,
message: '공유하는 메세지값을 보유하게 되는 property'
},
mutations: {
//현 상태값을 parameter로 받는 함수
increment:(oldState) => {
oldState.counter++;
},
decrement:(oldState) => {
oldState.counter--;
},
//? set (두개의 parameter)
// (state, payload)
/* payload
- 헤더값, 메티데이터를 제외한 실제 사용되는 데이터값만을 의미하는 용어
- 페이로드는 사용에 있어서 전송되는 데이터를 뜻한다.
- 페이로드는 전송의 근본적인 목적이 되는 데이터의 일부분으로 그 데이터와 함께 전송되는 헤더와 메타데이터와 같은 데이터는 제외
*/
set:(oldState, payload) => {
//새로운 데이터로 기존 데이터 수정하는 로직
//브라우저 통해서 입력되는 데이터값들은 문자열 따라서 숫자로 변환해서 대입
console.log(payload); // payload : newData
oldState.counter = parseInt(payload.newData);
},
update:(oldState, payload) => {
oldState.message = payload.newData;
}
}
});
1. 상태(state)
- 애플리케이션이 관리해야 할 중요한 공유 데이터
2. 변이(mutation)
- 상태를 변경하는 함수들을 보유
Counter.vue
<!-- Vuex.store를 사용하는 컴포넌트 -->
<template>
<div id="app">
<p>모든 component가 공유하는 숫자 : 8</p>
값 입력 : <input type="text" v-model="newValue" @change="set({newData:newValue})"> <br>
<button @click="increment">1씩 증가 +</button>
<button @click="decrement">1씩 감소 -</button>
</div>
</template>
<script>
import Constant from '../js/Constant.js'
export default {
data(){
return {newValue: 0};
},
computed: {
count(){
return this.$store.state.counter;
},
},
methods: {
increment: function () {
this.$store.commit("increment");
},
decrement: function (){
this.$store.commit("decrement");
},
set(payload){
this.$store.commit("set", payload);
}
},
}
</script>
this.$state 를 통해 Vuex 저장소에 접근할 수 있다.
특히, mutation 같은 경우는 commit 을 통해 함수를 불러오고, 입력 변수를 넣을 수 있다.
Discussion and feedback