티스토리 뷰
모든 Vuex 어플리케이션의 중심에는 store가 있습니다. store는 어플리케이션의 상태를 저장하는 컨테이너입니다. Vuex의 store와 전역객체와 두가지 차이점이 있습니다.
- Vuex store는 반응형입니다. Vuex store가 변경되면 컴포넌트는 변경된 store를 감지하여 화면을 업데이트합니다.
- store의 state를 직접 변경 할 수 없습니다. store의 상태를 변경할 수 있는 유일한 방법은
commit
을 통해mutations
를 이용하는 방법입니다. 이렇게 하면 state 변화를 추척할 수 있고, 디버깅도 용이해 집니다.
1. Vuex 예시
state
와 mutations
를 사용한 간단한 Vuex 예제입니다.
// 모듈 시스템(npm 혹은 yarn)을 사용하는 경우 Vue.use(Vuex)를 먼저 호출해야합니다.
const store = new Vuex.Store({
state: {
count: 0
},
mutations: {
increment (state) {
state.count++
}
}
})
위의 예제와 같이 Vuex를 설정하면, store.state
를 사용하여 state
객체에 접근 할 수 있습니다.
store.commit('increment')
console.log(store.state.count) // -> 1
store.commit
을 이용하여 mutations
의 메소드에 접근 할 수 있고, 이 메소드를 이용하여 state
를 변경 할 수 있습니다.store.state.count
를 직접 변경하지 않고 mutations
를 통해 변경하는 이유는 state
변화를 추척하기 위해서 입니다. state
변화를 추척할 수 있기 때문에 디버깅이 편해집니다.
컴포넌트 안에서 store의 state를 사용한다는 말은, 쉽게 말해서 컴포넌트의 computed
속성에 store의 state를 리턴하는 함수를 정의한다는 말입니다.
Vuex 카운터 앱에서 코드를 확인 할 수 있습니다.
2. Vuex 어플리케이션 구조
이제는 Vuex를 사용하는 어플리케이션의 구조에 대해 이야기 할 것입니다. 이번 내용은 Vuex의 모듈 내용을 아주 약간 포함하고 있지만, 그냥 그런것이 있구나 정도로 이해하고 넘어가셔도 무방할 것 같습니다.
├── index.html
├── main.js
├── api
│ └── ... # API 요청을 위한 추상화를 포함합니다.
├── components
│ ├── App.vue
│ └── ...
└── store
├── index.js # 모듈을 조합하고 저장소를 내보내는 곳 입니다.
├── actions.js # 루트 액션
├── mutations.js # 루트 변이
└── modules
├── cart.js # cart 모듈
└── products.js # products 모듈
위의 프로젝트 구조는 단순한 예제로 Vuex는 코드 구조를 제한하지 않습니다. 다만 3가지 원칙은 반드시 지켜야 합니다.
- Application-level
state
는 중앙 집중식 store입니다. state
를 변경하는 유일한 방법은commit
을 통한mutations
를 이용하는 것입니다.- 비동기 로직은 캡슐화 되어야 하며,
actions
에서 비동기 로직이 사용되어야 합니다.
위의 3가지 원칙만 지킨다면 프로젝트 구조화 하는 것은 사용자에게 달려 있습니다.
참고
'Vue.JS' 카테고리의 다른 글
[vuex] Getters (0) | 2019.07.02 |
---|---|
[vuex] State (0) | 2019.06.28 |
[vuex] Vuex란 (0) | 2019.06.26 |
[vuex] Vuex 설치하기 (0) | 2019.06.23 |
[vue-router] Lazy Loading Routes (0) | 2019.06.19 |
댓글
공지사항
최근에 올라온 글