vuex 관리 상태 창고 사용 설명

12183 단어 vuex관리 상태
1.Vuex 가 뭐 예요?
 Vuex 는 Vue.js 응용 프로그램 을 위 한 상태 관리 모델 입 니 다.이 는 중앙 식 저장 관리 에 응 용 된 모든 구성 요소 의 상 태 를 사용 하고 해당 하 는 규칙 으로 상 태 를 예측 가능 한 방식 으로 변화 시 킵 니 다.Vuex 도 Vue 의 공식 디 버 깅 도구devtools extension에 통합 되 어 0 설정 의 time-travel 디 버 깅,상태 스냅 샷 가 져 오기 내 보 내기 등 고급 디 버 깅 기능 을 제공 합 니 다.전역 단일 모드 를 사용 하여 구성 요소 의 공유 상 태 를 추출 하여 관리 하여 구성 요소 트 리 의 모든 위치 에서 공 유 된 상태 나 트리거 행 위 를 가 져 올 수 있 습 니 다.
 그러면 상 태 는 무엇 입 니까?vuex 를 사용 하지 않 았 을 때 현재 구성 요소 에서 data 에서 공유 해 야 할 데 이 터 를 상태 로 이해 합 니 다.
『8195』vuex 는 상태 나 행 위 를 공유 하 는 상태 로 만 들 었 고 공 유 된 상태 나 행 위 는 각 구성 요소 에서 접근 할 수 있 으 며 하위 또는 하위 간 전달 변 수 를 줄 이 고 개발 효율 을 높 였 다.
2.vuex 를 사용 하지 않 을 때 와 vuex 를 사용 할 때의 차이
『8195』우리 가 vuex 를 사용 하지 않 을 때 구성 요소 간 에 정 보 를 전달 하 는 것 이 비교적 번 거 로 울 수 있 습 니 다.
vuex 를 사용 하지 않 을 때 부자 간 에 메 시 지 를 전달 합 니 다:
App.vue 파일 중:

<template>
 <div id="app">
   <Fruits :fruitList="fruitList"/>
 </div>
</template> 
<script>
import Goods from './components/Goods';
export default {
 name: 'App',
 components:{
  Fruits,
  Goods
 },
 data(){
  return{
   goodList:[
   {
    name:'doll',
    price:12
   },
   {
    name:'glass',
    price:10
   }
  ],
  }
 }
}
</script>
<style>
</style>
Good.vue 파일 중:

<template>
 <div class="hello">
   <ul>
    <li v-for="(good,index) in goodList" :key="index">
     name:{{good.name}} number: {{good.number}} {{index}}
    </li>
   </ul>
 </div>
</template>

<script>
export default {
 props:['goodList'],
}
</script>
<style>

</style>
형제 간 에 메시지 전달:
먼저 두 형제 간 에 전송 되 는 단추 로 js 파일 을 만 듭 니 다.여기 서 msg.js 라 고 이름 을 지 었 습 니 다.

//     vue
import Vue from 'vue';
export default new Vue
형제 구성 요소 Goods:

<template>
 <div>
    <button @click="deliver">  </button>
 </div>
</template>

<script>
import MSG from '../msg';
export default {
 data(){
  return{
   msg:'hahah'
  }
 },
 methods:{
  deliver() {
    MSG.$emit('showMsg',this.msg)
  }
 }
 
}
</script>
<style>

</style>
형제 구성 요소 과일:

<template>
 <div>
    <button @click="deliver">  </button>
 </div>
</template>

<script>
import MSG from '../msg';
export default {
 data(){
  return{
   msg:'hahah'
  }
 },
 methods:{
  deliver() {
    MSG.$emit('showMsg',this.msg)
  }
 }
 
}
</script>
<style>

</style>
App 구성 요소 의 코드:

버튼 클릭:
     

 상술 한 형제 구성 요소 간 의 전송 값 은 좀 번 거 롭 지 않 습 니까?vue 구성 요소 의 값 을 처음 배 웠 을 때,나 도 이런 방법 이 매우 번거롭다 고 느 꼈 다.vuex 는 이 문 제 를 잘 해결 하고,즐겁게 코드 를 작성 했다.
vuex 공유 상태 데이터 사용
store.js 설정:

import Vue from 'vue';  //  vue
import Vuex from 'vuex'; //  vuex

Vue.use(Vuex) //    Vuex

const state = {
  count:1,
  totalName:'total'
}

const store = new Vuex.Store({
  state
 })
 export default store
App.vue 의 설정:

<template>
 <div id="app">
   <Fruits>
   <div>--------------------------</div>
   <Goods>
 </div>
</template> 
<script>
import Fruits from './components/Fruits';
import Goods from './components/Goods';
export default {
 name: 'App',
 components:{
  Fruits,
  Goods
 }
}
</script> 

<style>

</style>
Good.vue 설정

<template>
 <div>
  <div>  Goods    </div>
   <div>       :{{this.count}}</div>
  <div>         {{this.totalName}} </div>
 </div>
</template>
<script>
import {mapState} from 'vuex'; //      
export default {
  computed:{
   ...mapState(['count','totalName']) //       
  } 
}
</script>
<style>

</style>
Fruits.vue

<template>
 <div>
  <div>  Fruits    </div>
  <div>       :{{this.count}}</div>
  <div>         {{this.totalName}} </div>
 </div>
</template>

<script>
import {mapState} from 'vuex';  //      
export default {
  computed:{
    ...mapState(['count','totalName'])  //       
  }
}
</script>

<style>

</style>
 상기 vuex 를 사용 하여 상태 데이터 값 을 간단하게 인용 하 는 예 를 들 어 데 이 터 를 state 에 넣 어 관리 하고 보조 함수 와 state 의 데 이 터 를 구성 요소 에 도입 하여 구성 요소 에서 호출 하 는 것 이 vuex 를 사용 하지 않 는 것 보다 쉬 운 방법 이 아 닙 니까?하지만 이것 이 야 말로 아주 얕 고 아주 얕 은 시작 일 뿐이다.다음은 본문 으로!!!
3.vuex 의 사용
vuex 설치
 터미널 을 열 고 명령 행npm install vuex --save을 입력 하여 vuex 를 다운로드 합 니 다.

vuex 의 핵심 개념:
  • State:공유 상 태 는 구성 요소 의 data 에 해당 하 는 데이터 입 니 다.이 때 는 전역 변수 가 되 었 습 니 다.
  • Getter:state 의 파생 상 태 를 바탕 으로 구성 요소 의 computed 속성 에 해당 합 니 다.
  • Mutation:vuex 에서 store 공유 상태 에서 의 방법 을 변경 하고 mutation 을 제출 하여 상 태 를 수정 하 며 동기 화 작업 데 이 터 를 진행 합 니 다.보통 action 을 통 해 비동기 데 이 터 를 얻 고 commt 를 통 해 mutation 에 데 이 터 를 제출 하 며 mutation 동기 화 작업 state 에서 의 데 이 터 를 얻 습 니 다.
  • action:비동기 작업 을 지원 합 니 다.비동기 로 요청 한 데 이 터 를 가 져 오고 가 져 온 데 이 터 를 mutation 에 동기 화하 여 ajax 비동기 요청 데 이 터 를 실현 합 니 다.mutation 은 데 이 터 를 state 에 동기 화 합 니 다.
  • module:후기 에 프로젝트 에 대한 관 리 를 편리 하 게 하기 위해 store 중의 state,mutation,action,getter 에 대해 분자 모듈 화 관 리 를 실시 합 니 다.
  • 다음은 모듈 규범 에서 소개 하 겠 습 니 다.
    모듈 서브 모듈 화 관리
    하위 모듈 관리 에 있어 서 핵심 화 된 관리 대상 store 를 만들어 index.js 라 고 이름 을 지어 다른 state,getter,mutations,actions 를 만들어 야 합 니 다.이 store 모듈 에 도입 하여 store 대상 을 노출 시 키 고 다음은 코드 부분 입 니 다.
    모듈 구조

    vuex 응용 핵심 관리 창고 store
    다음 에 store 코드 입 니 다.여기 있 는 js 는 index.js 라 고 이름 을 지 었 습 니 다.state,mutations,actions,getters 를 store 에 도입 하여 store 대상 을 드 러 냅 니 다.
    
    /*
      vuex        store
    */
    import Vue from 'vue';
    import Vuex from 'vuex';
    
    import state from './state';
    import mutations from './mutations';
    import actions from './actions';
    import getters from './getters';
    
    //      
    Vue.use(Vuex)
    //new   Vuex   , state,mutation,action,getters   vuex store ,      
    export default new Vuex.Store({  
      state,
      mutations,
      actions,
      getters,
    })
    
    state 상태 관리 데이터
     우 리 는 일반적으로 관리 해 야 할 공유 데 이 터 를 state 에 넣 어 전역 변수 처럼 보이 게 하고 필요 한 구성 요소 에 대해 이 state 상태 데 이 터 를 도입 합 니 다.다음은 state 의 코드 예:
    
    /* 
          
    */
    export default{
      userInfo: {}, //    
      count:1
    }
    
    mutation-types
    *8195°mutations 이벤트 형식 대신 상수 로 사용 하 는 것 은 흔히 볼 수 있 는 모델 입 니 다.이 상수 들 을 하나의 단독 파일 에 넣 으 면 코드 합작 자 들 이 코드 에 대해 한눈 에 알 수 있 고 코드 의 읽 기 가능성 을 강화 할 수 있 습 니 다.아래 의 위의 코드 는 예 일 뿐 이 므 로 이 때 는 한 가지 방법 만 도입 되 었 다.
    
    /* 
        n mutation type    
    */
    export const RECEIVE_USER_INFO = 'receive_user_info'  //      
    actions 의 비동기 동작
    『8195』actions 는 mutations 와 유사 하지만 비동기 작업 을 할 수 있 으 며,비동기 작업 으로 얻 은 데 이 터 를 mutations 에 제출 하여 mutations 가 state 의 상태 데 이 터 를 변경 할 수 있 습 니 다.ajax 요청 의 데 이 터 를 가 져 오고 가 져 온 데 이 터 를 mutations 에 제출 하여 state 데이터 상 태 를 업데이트 하 는 데 자주 사 용 됩 니 다.ajax 에서 요청 한 코드 를 보 냅 니 다.여 기 는 프 리 젠 테 이 션 을 하지 않 습 니 다.이 때 action 의 데 이 터 는 ajax 요청 을 보 내 서 얻 으 면 됩 니 다.이때 도 actions 에서 비동기 작업 을 할 수 있 음 을 나 타 낼 수 있다.아래 코드:
    
    /* 
        mutation    state        
    */
    import {
      RECEIVE_USER_INFO,   //   mutation-types     
    } from './mutation-types';
    
    import {
      reqUserInfo,
    } from '../api';   //      ajax     
    
    export default{
      //         
      async getUserInfo({commit}){
      //           ,        ,        result
        const result = await reqUserInfo() 
        //        ,result.code  0,    1,                
        if (result.code === 0) { 
          const userInfo = result.data //        
          //  commit    ,              mutation
          commit(RECEIVE_USER_INFO,{userInfo}) 
        }
      }
    }  
    주의해 야 할 것 은 구성 요소 에서 다음 과 같은 방식 으로 vuex 구성 요 소 를 호출 하 는 방법 입 니 다.
    
    this.$store.dispatch('getUserInfo')
    
    mutations 동기 화 제출 데이터
    *8195.mutations 는 state 의 상태 논 리 를 변경 하고 state 의 상태 데 이 터 를 동기 화하 기 위해 사용 합 니 다.알 아야 할 것 은 vuex 에서 mutation 을 통 해 state 대상 을 수정 할 수 있 고 actions 를 통 해 얻 은 데 이 터 를 가 져 와 state 를 수정 할 수 있 으 며 mutations 모듈 에서 상태 데 이 터 를 직접 정의 할 수 있 습 니 다.mutations 와 위의 actions 모듈 을 통 해 commt 는 mutation 모듈 에 사 용 된 것 임 을 알 수 있 습 니 다.구성 요소 에서 mutation 모듈 의 코드 를 다음 과 같이 호출 합 니 다.
    
    this.$store.commit('increment')	
    
    아래 위 mutation 모듈 의 코드:
    
    /* 
          state        
    */
    
    import {
      RECEIVE_USER_INFO,
    } from './mutation-types';
    
    export default{
    //            state,          ,
     mutation   (playload)
      [RECEIVE_USER_INFO](state,{userInfo}){
        state.userInfo = userInfo
      },
      //   actions   mutation     state    
      increment(state){
        state.count = 3
      }
    }
    
    Getters state 가공 하기
    Getters 는 computed 계산 속성 에 해당 하 며 state 상태 데 이 터 를 가공 처리 하 는 데 사 용 됩 니 다.두 개의 기본 매개 변 수 는 state 이 고 두 번 째 기본 매개 변 수 는 getters 입 니 다.
    구성 요소 에서 이 방법 을 호출 하 는 코드 세 션 은:
    
    this.$store.getters.totalCount()
    
    다음은 Getters 의 코드 세 션 입 니 다:
    
    /* 
            state getter        
    */
    export default{
    
      plusCount(state){
        return state.count + 1
      },
     //  state       ,   getters   plusCount  
      totalCount(state,getters){
        return getters.plusCount + state.count
      }
      
    }
    
    그러면 이상 의 store 에 대해 간단하게 소 개 를 마 쳤 습 니 다.여러분 이 보고 vuex 에 대해 어느 정도 이해 하 실 것 이 라 고 믿 습 니 다.그렇다면 이 럴 때 사용this.$store.state this.$store.getters.xxx이 귀 찮 지 않 을 까?state 와 getters 를 도입 하 는 또 다른 방식 을 소개 합 니 다.
    보조 함수 mapState 와 mapGetters
     상술 한 state 와 getters 를 인용 하 는 방법 에 대해 귀 찮 지 않 습 니까?맵 스테이 트 를 사용 하면 편리 함 을 느 낄 수 있 습 니 다.
    
    //              
    import { mapGetters,mapState } from 'vuex'
    
    export default {
     computed: {
     //            getter    computed    
      ...mapGetters(['plusCount','totalCount',])
     //            state    computed    
     	...mapState(['userInfo','count'])
     }
    }
    
    vuex 관리 상태 창고 사용 에 대한 자세 한 설명 은 여기까지 입 니 다.vuex 관리 상태 창고 에 대한 더 많은 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기