vue 상태 관리 모드 vuex

vuex 는 vue.js 를 위 한 상태 관리 모델 로 devtools 를 사용 하여 디 버 깅 할 수 있 습 니 다.
비고:본 논문 의 예제 등 코드 는 es6 의 문법 을 사용 할 것 입 니 다.
링크
  • vuex 공식 중국어 사이트
  • vue 와 vuex 를 사용 하여 실 현 된 간이 상점 은 참고 하 시기 바 랍 니 다.
  • vuex 가 뭐 예요?
    vuex 홈 페이지 의 말 을 먼저 인용 합 니 다.
    Vuex 는 Vue.js 응용 프로그램 을 위 한 상태 관리 모델 입 니 다.이 는 중앙 식 저장 관리 에 응 용 된 모든 구성 요소 의 상 태 를 사용 하고 해당 하 는 규칙 으로 상 태 를 예측 가능 한 방식 으로 변화 시 킵 니 다.
    상태 관리 모드,집중 식 저장 관 리 는 듣 기만 해도 높 아 무섭다.내 가 보기에 vuex 는 공유 해 야 할 변 수 를 모두 한 대상 에 저장 한 다음 에 이 대상 을 최상 위 구성 요소 에 넣 어 다른 구성 요소 에 사용 하도록 하 는 것 이다.이렇게 말 하면 vue 를 js 파일,구성 요소 가 함수 라 고 생각 합 니 다.vuex 는 전역 변수 입 니 다.이'전역 변수'는 특정한 규칙 을 포함 하고 있 을 뿐 입 니 다.
    vue 의 구성 요소 화 개발 에 서 는 현재 구성 요소 의 상 태 를 다른 구성 요소 에 전달 해 야 하 는 경우 가 많 습 니 다.부자 구성 요소 가 통신 할 때,우 리 는 보통 props+emit 라 는 방식 을 사용한다.그러나 통신 쌍방 이 부자 구성 요소 가 아니 라 전혀 관련 관계 가 없 거나 한 상태 에서 여러 구성 요소 에 공유 해 야 할 때 매우 번 거 롭 고 데이터 도 유지 하기 어 려 울 것 이다.이것 은 우리 개발 에 있어 서 매우 우호 적 이지 않다.vuex 는 이 럴 때 실 용적 이지 만 vuex 를 사용 한 후에 도 더 많은 개념 과 프레임 워 크 를 가 져 왔 으 니 신중 해 야 합 니 다!
    vuex 안에 어떤 내용 이 있 습 니까?
    Talk is cheap,Show me the code.먼저 코드 간격 으로 이렇게 많은 글 자 를 보 여 줍 니 다.
    
    const store = new Vuex.Store({
      state: {
        name: 'weish',
        age: 22
      },
      getters: {
        personInfo(state) {
          return `My name is ${state.name}, I am ${state.age}`;
        }
      }
      mutations: {
        SET_AGE(state, age) {
          commit(age, age);
        }
      },
      actions: {
        nameAsyn({commit}) {
          setTimeout(() => {
            commit('SET_AGE', 18);
          }, 1000);
        }
      },
      modules: {
        a: modulesA
      }
    }
    
    이것 이 바로 가장 기본 적 이 고 완전한 vuex 코드 입 니 다.vuex 는 다섯 개의 기본 대상 을 포함 합 니 다.
  • state:저장 상태.변수4567918)
  • getters:파생 상태.즉,set,get 의 get 은 두 개의 선택 가능 한 매개 변수 가 있 습 니 다.state,getters 는 각각 state 의 변수 와 다른 getters 를 가 져 올 수 있 습 니 다.외부 호출 방식:store.getters.personInfo().vue 의 computed 와 차이 가 많 지 않 습 니 다.
  • mutations:제출 상태 수정.즉,set,get 의 set 입 니 다.이것 은 vuex 에서 state 를 수정 하 는 유일한 방식 이지 만 비동기 작업 은 지원 되 지 않 습 니 다.첫 번 째 매개 변 수 는 기본적으로 state 입 니 다.외부 호출 방식:store.commt('SETAGE', 18)。vue 의 methods 와 유사 합 니 다.4567918)
  • actions:mutations 와 유사 합 니 다.그러나 actions 는 비동기 동작 을 지원 합 니 다.첫 번 째 매개 변 수 는 기본적으로 store 와 같은 매개 변수 속성 을 가 진 대상 입 니 다.외부 호출 방식:store.dispatch(nameAsyn).
  • modules:store 의 서브 모듈 은 내용 이 store 의 인 스 턴 스 에 해당 합 니 다.호출 방식 은 앞에서 소개 한 것 과 비슷 합 니 다.현재 하위 모듈 이름 만 추가 해 야 합 니 다.예 를 들 어 store.a.getters.xxx().()4567918)
    vue-cli 에서 vuex 를 사용 하 는 방식
    일반적으로 우 리 는 vue-cli 를 이용 하여 실제 개발 을 하 는데 vue-cli 에서 개발 과 호출 방식 이 약간 다르다.
    
    ├── index.html
    ├── main.js
    ├── components
    └── store
      ├── index.js     #           store    
      ├── state.js     #      state
      ├── getters.js    #      getter
      ├── mutation-types.js #     mutations  (    mutions       )
      ├── mutations.js   #      mutation
      ├── actions.js    #      action
      └── modules
        ├── m1.js     #   1
        └── m2.js     #   2
    state.js 예제:
    
    const state = {
      name: 'weish',
      age: 22
    };
    
    export default state;
    
    getters.js 예제(state 를 직접 사용 하 는 것 이 아니 라 getters 를 사용 합 니 다):
    
    export const name = (state) => {
      return state.name;
    }
    
    export const age = (state) => {
      return state.age
    }
    
    export const other = (state) => {
      return `My name is ${state.name}, I am ${state.age}.`;
    }
    
    mutation-type.js 예제(모든 mutations 함수 이름 을 이 파일 에 넣 을 것 입 니 다):
    
    export const SET_NAME = 'SET_NAME';
    export const SET_AGE = 'SET_AGE';
    mutations.js 예제:
    
    import * as types from './mutation-type.js';
    
    export default {
      [types.SET_NAME](state, name) {
        state.name = name;
      },
      [types.SET_AGE](state, age) {
        state.age = age;
      }
    };
    
    actions.js 예제(비동기 작업,여러 commt 시):
    
    import * as types from './mutation-type.js';
    
    export default {
      nameAsyn({commit}, {age, name}) {
        commit(types.SET_NAME, name);
        commit(types.SET_AGE, age);
      }
    };
    
    modules--m1.js 예제(복잡 한 응용 이 아니라면 일반적으로 모듈 을 나 누 지 않 습 니 다):
    
    export default {
      state: {},
      getters: {},
      mutations: {},
      actions: {}
    };
    index.js 예제(vuex 조립):
    
    import vue from 'vue';
    import vuex from 'vuex';
    import state from './state.js';
    import * as getters from './getters.js';
    import mutations from './mutations.js';
    import actions from './actions.js';
    import m1 from './modules/m1.js';
    import m2 from './modules/m2.js';
    import createLogger from 'vuex/dist/logger'; //     
    
    vue.use(vuex);
    
    const debug = process.env.NODE_ENV !== 'production'; //       true,   false
    
    export default new vuex.Store({
      state,
      getters,
      mutations,
      actions,
      modules: {
        m1,
        m2
      },
      plugins: debug ? [createLogger()] : [] //        vuex     
    });
    
    
    마지막 으로 store 인 스 턴 스 를 main.js 에 있 는 vue 에 마 운 트 하면 됩 니 다.
    
    import store from './store/index.js';
    
    new Vue({
     el: '#app',
     store,
     render: h => h(App)
    });
    
    
    vue 구성 요소 에서 사용 할 때,우 리 는 보통 mapGetters,mapActions,mapMutations 를 사용 합 니 다.그리고 vue 에서 methods 와 computed 를 호출 하 는 방식 으로 이러한 변수 나 함 수 를 호출 할 수 있 습 니 다.예 는 다음 과 같 습 니 다.
    
    import {mapGetters, mapMutations, mapActions} from 'vuex';
    
    /*       script   */
    export default {
      computed: {
        ...mapGetters([
          name,
          age
        ])
      },
      methods: {
        ...mapMutations({
          setName: 'SET_NAME',
          setAge: 'SET_AGE'
        }),
        ...mapActions([
          nameAsyn
        ])
      }
    };
    
    
    총결산
    이상 은 vuex 에 관 한 지식 입 니 다.사실 vuex 는 간단 합 니 다.몇 번 더 사용 하면 익숙해 집 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
  • 좋은 웹페이지 즐겨찾기