반응형
0. Vuex 설치.
npm install --save vuex 명령어를 터미널에 입력
이후 설치가 완료되면 프로젝트의 package.json을 열어본다.
아래처럼 종속성이 추가되어있으면 성공이다.
"dependencies": {
"axios": "^0.21.1",
"core-js": "^3.6.5",
"vue": "^2.6.11",
"vue-axios": "^3.2.4",
"vuex": "^3.6.2"
},
1. Vuex는 왜 필요한가?
-> 복잡한 App에서 컴포넌트의 갯수가 많아지면 컴포넌트 간에 데이터 전달이 어려워짐.
-> 중앙 집중화된 상태 정보 관리가 필요하고, 상태 정보가 변경되는 상황과 시간을 추적해야 함
-> 컴포넌트에서 상태 정보에 안전하게 접근가능
2. Vuex 개념
State : 컴포넌트간 공유하는 데이터(data())
View : 데이터를 표시하는 화면 (template)
Action : 사용자의 입력에 따라 데이터를 변경하는 메서드(method)
3. State
아래와 같이 Vuex에서는 state로 선언 후 this.$store와 같이 사용한다.
//Vue
data: {
message: "Hello Vue.js!"
}
//Vuex
state: {
message: "Hello Vue.js!"
}
// 사용
<p>{{ this.$store.state.message }}</p>
4. getters
state값에 접근하는 속성,
//store.js
state: {
num: 10
},
getters: {
getNumber(state) {
return state.num;
},
doubleNumber(state) {
return state.num * 2;
}
}
// 사용
<p>{{ this.$store.getters.getNumber }}</p>
5. Mutation
state의 값을 변경하는 속성. 메서드이다.
state: { num: 10 },
mutations: {
sumNumbers(state, anotherNum) {
state.num += anotherNum;
}
}
6. state를 직접 변경하지 않고, mutation을 사용하여 변경하는 이유는?
어떤 시점에서 state가 변화했는지 알기 위함이다.
7. Vuex Helper
우선 Helper를 사용하려면 아래와 같이 import가 필요하다.
import { mapState } from 'vuex'
import { mapGetters } from 'vuex'
import { mapMutations } from 'vuex'
import { mapActions } from 'vuex'
사용 시에는 {...mapState['??']} 같은 형태로 사용해야 한다.
- mapState
Vuex에 선언한 state속성을 뷰 컴포넌트에 더 쉽게 연결해주는 역할을 한다.
//App.vue
import { mapState } from 'vuex'
export default {
computed: { ...mapState(['num']) }
//num() { return this.$store.state.num }
}
//store.js
state: {
num: 10
}
-mapGetter
Vuex에 선언한 Getter속성을 뷰 컴포넌트에 더 쉽게 연결해주는 역할을 한다.
//App.vue
import { mapGetters } from 'vuex'
export default {
computed : { ...mapGetters(['reverseMessage']) }
}
//store.js
getters: {
reverseMessage(state) {
return state.msg.split('').reverse().join('');
}
}
이외에도 mapMutation, mapAction이 있다. 이것들은 이 다음에 포스팅 할 실제 코드에서 사용 방법 확인
반응형
'Dev > [Vue.js]' 카테고리의 다른 글
[Vue.js] parent <-> child간 양방향 바인딩(with custom Tag) (0) | 2022.04.26 |
---|---|
[Vue.js] Vue Axios 적용해보기 (0) | 2021.02.15 |
[Vue.js] 버튼과 이벤트 연결하기 (0) | 2021.02.09 |
[Vue.js] Vue.js 시작하기 (Hello World) (0) | 2021.02.09 |
[vue.js] vue.js란? 개발 환경 만들기 (0) | 2021.02.08 |