Vue를 사용하는데 데이터 관리가 너무 어려웠다.
프로젝트가 엄청 큰 것이 아니라서 도입하진 않았었는데, 이제 슬 도입해서 데이터 관리하는 게 나중에 가서도 편할 것 같다는 생각이 들어서 기록해보려고 한다.
아래 명령어로 Vuex 설치
npm install vuex@next
이지하게 설치 완료.
이제 Vuex로 데이터를 관리하기 위해 store.js를 생성해 준다.
이제 Vuex의 개념을 다시 살펴봐야 한다.
- Vue의 상태를 관리하는 패턴이자 라이브러리.
- 모든 컴포넌트들의 중앙 저장소 역할을 담당
하나의 저장소에 데이터를 관리하고, 컴포넌트에서 사용하니 유연하고 편리하게 데이터 공유가 가능하다.
이 개념을 이해해야 한다.
State
- data를 관리한다.(데이터 저장소)
- State에서 컴포넌트에 올리는 과정을 랜더링 한다고 말한다.
Action
- 컴포넌트에서 데이터를 변경하고 싶으면 메서드를 실행해야 하는데, 해당 메서드를 관리하는 것이 Action
- Action을 호출하는 작업을 Dispatch라고 한다.
- 여기서 스프링 부트와 REST API 통신을 진행한다.(비동기)
- Action에서 절대 직접 State의 데이터를 변경시키면 안 된다. (이건 Mutations가 하도록 분리)
Mutations
- 비동기적으로 받은 data에 추가 작업을 진행해야 하는 경우 사용함.
- Mutations를 commit으로 호출해서 처리한 뒤 State로 데이터를 저장하는 방식.
- 비동기 작업이 가능하지만 웬만하면 하지 마라.(언제 응답이 올 지 몰라서)
일단 store.js를 생성
// Vuex 4.x를 사용하여 Vue 3와 호환되도록 설정
import { createStore } from "vuex";
export default createStore({
state: {
isLoggedIn: false,
},
mutations: {
setLoginState(state, { isLoggedIn }) {
state.isLoggedIn = isLoggedIn;
},
},
actions: {
login({ commit }, { isLoggedIn }) {
commit("setLoginState", { isLoggedIn });
localStorage.setItem("isLoggedIn", isLoggedIn);
},
logout({ commit }) {
commit("setLoginState", { isLoggedIn: false });
localStorage.removeItem("isLoggedIn");
},
},
});
state : 저장소에는 isLoggedIn이라는 이름을 둬서 로그인 상태를 관리.
mutations : state에 있는 데이터를 변경하기 위한 메서드.(state의 변경은 mutations로만 가능하다)
actions : 여러 mutations를 실행하거나, 비동기 작업을 수행한다. actions을 통해 외부에서 dispatch로 부를 메서드를 정의하고, mutations를 호출해서 데이터 변경.
위의 login 코드를 보면
- 외부에서 dispatch로 login(actions) 호출.
- 인자로 받은 isLoggedIn을 부르기 위해 commit을 사용해서 setLoginState(mutations) 호출
- 데이터 변경 진행
- 로컬스토리지에 isLoggedIn 상태 변경
위와 같은 순서대로 흘러간다.
.then((response) => {
// 스토어의 로그인 액션 호출
this.$store.dispatch("login", { isLoggedIn: true });
this.$router.push("/chat");
})
외부에서는 dispatch를 통해 해당하는 actions를 호출해 주고, 값이 있다면 같이 넘겨준다.
이러한 방식을 통해 데이터를 관리할 수 있다.
아 뷰 어렵다 프론트 어렵다
반응형
'Vue' 카테고리의 다른 글
Vuex state 데이터 새로고침으로부터 지키는 방법 (1) | 2024.04.01 |
---|---|
Vuex에서 새로고침 시 store 초기화 막는 방법 (0) | 2023.05.17 |
Vuex에서 회원가입 하면 로그인 컴포넌트 불러오는 방법. (1) | 2023.05.16 |
vue에서 API_KEY 설정하는 방법 (0) | 2023.05.16 |