흐름 : 부모 => actions => API => mutations => state => 자식에서 state 접근
이 방법은 vuex를 최대한 활용 하는 방법으로 데이터를 표현하는 곳에서 직접 state에 접근 하는 방법이다. 이때 데이터를 표현하는 곳에서는 actions를 호출하지 않는다. 내 생각에 actions에 대한 결합도가 높아지기 때문인듯하다(해당 컴포넌트의 범용성이 낮아진다).
2. props 활용
1
흐름 : 부모 => actions => API => mutations => state => 부모에서 state에 접근 후 props로 전달 => 자식
this.$store.disaptch('메소드명'); this.$store.disaptch('메소드명', 값); // 값은 오직 하나만 전달 가능하므로 여러개를 전달하려면 객체를 통해 전달한다.
actions에서 api통신을 한 결과를 state에 전달하여야 하는데 이때 actions 내부에서 바로 state에 접근이 불가능하다. mutations라는 것을 통해서만 가능하다. actions에 정의된 메소드의 파라미터로 context값이 넘어오는데 context의 commit 메소드를 호출하면 mutation에 전달가능하다.
1 2 3 4 5 6 7 8 9 10 11 12
var actions = { state: {}, actions: { FETCH_DATA(context, param) { // param에 dispatch를 실행할때 넘겼던 값을 받을수 있다. fetchDataList() .then(({ data }) => { context.commit('mutation메소드명', '전달할 값') }) .catch() } } }
3. mutations
actions에서 backend(api)와이 실행 결과를 state에 저장할때 사용되는 중간 연결자이다. actions에서 context.commit으로 실행될 메소드를 정의한다.
// state 값 사용 할 파일 import { mapGetters } from'vuex';
var Vue = { computed: { ...mapGetters(['value']) } }
getters는 computed와 비슷한 역할을 한다. 컴포넌트에서는 mapGetter에서 배열을 넘겨준다(이때 배열의 문자열이 vuex의 getters에 정의 된 메소드 이름을 넘겨주면 해당값을 받아온다. getters에 등록 하는 번거로움이 있지만 사용할때는 변수명이 명료해서 보기 좋다.
5. vuex의 mapGetter를 이용(mapGetters의 객체를 이용하는 방법)
vuex 파일의 사용법은 위와 동일하다.
1 2 3 4 5 6 7 8 9 10
// state 값 사용 할 파일 import { mapGetters } from'vuex';
배열을 이용할때는 변수명을 마음대로 지정이 불가능하지만 객체를 이용하면 이름을 컴포넌트에서 마음대로 지정 할수 있다.
모듈화
하나의 파일에서 모든 데이터를 관리하면 알아보기 힘들기 때문에 모듈화 작업을 한다. mutations, actions, state, getters를 따로 파일을 만들어서 관리한다. 상황에 따라 분리 할수도 있고 길지 않다면 하나의 파일에서 관리할수 있고 더 세분화로 분리할수도 있다.