DevYoon
gimewn
----------
하나하나 알아가는 재미 ⊹꒰⍢ ꒱꙳
DevYoon
[Vue] Vuex 본문
Web/Vue
[Vue] Vuex
gimewn
2022. 5. 11. 23:07
Vuex
1️⃣ Vuex란?
Vue 상태관리 라이브러리
- state(상태)를 전역 저장소로 관리할 수 있도록 지원
- 애플리케이션의 모든 컴포넌트에 대한 중앙 집중식 저장소
- 상태가 예측 가능한 방식으로만 변경
- 컴포넌트의 공유된 상태를 추출 ➡️ 전역에서 관리
- 컴포넌트는 커다란 view가 되며, 모든 컴포넌트는 트리에 상관없이 상태에 액세스하거나 동작을 트리거 할 수 있음
2️⃣ Props&Emit VS Vuex
Props&Emit
- props&Emit은 단반향 흐름, 부모 ➡️ 자식 간의 전달만 가능
- 장점 : 데이터의 흐름 직관적으로 파악 가능
- 단점 : 컴포넌트 중첩이 깊어지면 공통의 상태를 공유하는 여러 컴포넌트가 있는 경우 데이터 전달이 매우 복잡해짐
- 단방향 데이터 흐름
- state : 앱을 작동하는 원본 소스 (data)
- view : state의 선언적 매핑
- action : view에서 사용자 입력에 대해 반응적으로 state를 바꾸는 법 (methods)
Vuex
- 중앙 저장소(store)에 state를 모아놓고 관리
- 규모가 큰 프로젝트에서 효율적 ➡️ 컴포넌트 중첩이 깊어져도 데이터 전달이 복잡하지 않음
- 동일한 state를 공유하는 다른 컴포넌트들도 동기화
비교
3️⃣ Vuex Concept
State
- 중앙에서 관리하는 모든 상태 정보 (data)
- Vuex는 single state tree 사용 ➡️ 모든 애플리케이션 상태를 포함하는 원본 소스의 역할
- 애프리케이션마다 하나의 저장소
- State가 변화하면 해당 state를 공유하는 컴포넌트의 DOM 자동 렌더링
Mutations
- State를 변경하는 유일한 방법
- mutation의 Handler 함수는 반드시 동기적이어야 함
- 비동기적 로직(ex.콜백함수)는 state가 변화하는 시점이 의도한 것과 달라질 수 있고, 호출될 시기를 알 수 없음 (추적 불가능)
- 첫번째 인자로 항상 state를 받음
- Actions의 commit() 메서드에 의해 호출
Actions
- State를 변경할 수 있지만 직접 변경하지 않음
- State는 오로지 Mutations을 통해서만 조작 (역할 분담)
- Mutations를 commit() 메서드로 호출,
컴포넌트의 dispatch() 메서드에 의해 호출
- Mutations와 달리 비동기 작업 포함 가능
- context 객체 인자
- store/index.js 내에 있는 모든 요소의 속성에 접근 및 메서드 호출 가능
Getters
- State를 변경하지 않고 활용 ➡️ 계산 수행 (Computed와 유사)
- State 종속성에 따라 캐시(cached)되고, 종속성이 변경된 경우에만 다시 재계산