Vue
[Vue] 12. Vuex
개발자 뭄뭄
2022. 11. 26. 05:09
반응형
1. 상태관리 (State Management)
1. State?
: 현재에 대한 정보 (data)
⇒ Web Application에서는 현재 App 이 가지고 있는 Data로 표현할 수 있다.
2. Management
- 여러개의 component를 조합해서 하나의 App을 만든다.
- 각각의 component는 같은 상태(data)를 유지할 필요가 있다 ⇒ 상태 관리(State Management)가 필요하다
3. Pass Props & Emit Event
- props와 event를 통해서 상태관리를 하면
- 같은 데이터를 공유하고 있으므로, 각 컴포넌트가 동일한 상태를 유지하고 있다.
- 그러나!! components의 중첩이 깊어지면 데이터 전달이 쉽지 않다. ⇒ 데이터 전달 구조가 복잡해진다
💡
중앙 저장소 (Centralized Store)를 이용해 보면 어떨까? ⇒ Vuex
4. Centralized Store
- 중앙 저장소에 데이터를 모아서 상태 관리
- 규모가 크거나 컴포넌트 중첩이 깊은 프로젝트의 관리가 매우 편리
2. Vuex가 무엇이며, 왜 필요한가?
1. VueX?
- 상태관리 패턴 + 라이브러리 for vue ⇒ VueX
- 중앙 저장소를 통해 상태 관리 할 수 있도록 하는 라이브러리
- 데이터가 예측 가능한 방식으로 변경 될 수 있도록 하는 규칙 설정, Vue의 반응성을 효율적으로 사용하는 상태 관리 기능 제공
- Vue 의 공식 도구
3. Vuex 기본문법
1. VueX 시작하기
vue create vuex-app
cd vuex-app
vue add vuex
2. Vue vs VueX

- state
- 중앙에서 관리하는 모든 상태 정보
$store.state
로 state 데이터에 접근
- mutations
- 실제로 state를 변경하는 유일한 방법
- 반드시 동기적인 함수 (handler)가 들어와야 한다.
- 첫번째 인자로 state를 받으며, component 혹은 actions에서
commit()
메서드로 호출된다.
- actions
- mutations와 비슷하지만 비동기 작업을 포함할 수 있다. ⇒ state 직접 변경하는 역할 포기!
- state를 직접 변경하지 않고,
commit()
메서드로 mutations를 호출해서 state 변경
- context 객체를 인자로 받으며, store.js의 모든 요소가 메서드에 접근할 수 있음. ⇒ state를 직접 변경할 수는 있지만, 하지 않아야 한다.
- component에서
dispatch()
메서드에 의해 호출된다.
- getters
- vue의 computed에 해당
- state를 활용하여 계산된 값을 얻고자 할 때 사용
- getters의 결과는 캐시(cache) 되며, 종속된 값이 변경된 경우에만 재계산 됨
- getters에서 계산된 값은 state에 영향을 미치지 않음
- 첫번째 인자로 state, 두번째 인자로 getter를 받음
💡
모든 데이터를 다 state에 넣어야 하는 것은 아님!!!
Vuex에도 여전히 pass props & emit event 사용할 수 있다.
3. VueX 실습하기
- state 에 접근하기
- 바로 접근하기
<template> <div id="app"> <!-- 잘 권장하지 않는다. --> <h1>{{ $store.state.message }}</h1> </div> </template>
- computed 에 정의 후 접근하기
<template> <div id="app"> <!-- 더 권장하는 방식이다. --> <h2>{{ message }}</h2> </div> </template> <script> export default { name: 'App', components: { }, computed: { message(){ return this.$store.state.message } } } </script>
- 바로 접근하기
- actions
- component에서
dispatch(’action 함수 이름’, 넘겨주는 데이터)
- actions에서 함수 정의
functionName(context, 넘겨받은 데이터) {}
- context는 store의 모~든 속성을 가지고 있다. 하지만 state 직접조작하는 것을 삼가야 한다!!
- component에서
- mutations
- actions에서
commit('mutation이름', 넘겨주는 데이터)
형식으로 작성한다
- mutations에서 함수 정의
FUNCTION_NAME(state, 넘겨받은 데이터)
actions와 구분을 위해서 CAMEL_CASE로 작성한다.
state.message = newMessage
의 형태로 state의 값을 변경한다.
- actions에서
- getters
- getters에 함수를 작성한다.
functionName(state, getters) {}
- getters 출력하기
computed에 함수를 정의해서 사용한다. (state와 마찬가지로)
- getters에 함수를 작성한다.
Uploaded by N2T
반응형