Vuex를 고급으로 사용하는 방법

php中世界最好的语言
풀어 주다: 2018-05-28 15:07:01
원래의
1341명이 탐색했습니다.

이번에는 vuex를 고급 방식으로 사용하는 방법과 vuex를 고급 방식으로 사용할 때 주의 사항이 무엇인지 보여드리겠습니다. 다음은 실제 사례입니다. 함께 살펴보겠습니다.

1. Getter

먼저 이전 기사의 코드를 기억해 봅시다

computed:{
  getName(){
   return this.$store.state.name
  }
}
로그인 후 복사

이제 로직이 변경되었고, 최종적으로 얻을 것으로 예상되는 데이터(getName)는 this.$store.state를 기반으로 한다고 가정합니다. name 이 getName은 여러 곳에서 사용되기 때문에 여러 번 복사해야 합니다.

vuex는 getter를 제공합니다. 코드(파일 위치/src/store/index)를 참조하세요. .js)

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
 // 类似 vue 的 data
 state: {
  name: 'oldName'
 },
 // 类似 vue 的 computed -----------------以下5行为新增
 getters:{
  getReverseName: state => {
    return state.name.split('').reverse().join('')
  }
 },
 // 类似 vue 里的 mothods(同步方法)
 mutations: {
  updateName (state) {
   state.name = 'newName'
  }
 }
})
로그인 후 복사

그런 다음 파일 위치/src/main.js를 이렇게 사용할 수 있습니다

computed:{
  getName(){
   return this.$store.getters.getReverseName
  }
}
로그인 후 복사

사실 getter는 캡슐화 역할을 할 뿐만 아니라 vue의 계산된 속성과 같은 결과 데이터도 캐시합니다. 종속성이 변경된 경우에만 다시 계산해야 합니다.

2. actions 및 $dispatch

주의 깊게 보면 이전 코드의 mutations 헤더에 대한 주석이 다음과 유사하다는 것을 알 수 있습니다. vue에 있는 메소드(동기 메소드)

메소드 다음에 나오는 동기화 메소드는 무엇인가요? Mutation은 동기화 함수만 가능합니다. 설명을 참조하세요. of vuex:

이제 앱을 디버깅하고 devtool mutation log in 을 관찰한다고 상상해 보세요. 변형이 기록될 때마다 devtools는 이전 상태와 다음 상태의 스냅샷을 캡처해야 합니다. 그러나 위의 예에서 돌연변이의 비동기 함수에 있는 콜백은 이를 불가능하게 만듭니다. 왜냐하면 돌연변이가 실행될 때 콜백 함수가 아직 호출되지 않았기 때문에 devtools는 콜백 함수가 실제로 호출되는 시기를 알지 못하기 때문입니다. 콜백 함수 내에서 변경된 상태는 추적할 수 없습니다.
그래서 비동기 작업을 실행하려면 어떻게 해야 할까요? 대답은: action + $dispatch입니다. 계속해서 store/index.js

파일 위치/src/store/index.js

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
 // 类似 vue 的 data
 state: {
  name: 'oldName'
 },
 // 类似 vue 的 computed
 getters:{
  getReverseName: state => {
    return state.name.split('').reverse().join('')
  }
 },
 // 类似 vue 里的 mothods(同步方法)
 mutations: {
  updateName (state) {
   state.name = 'newName'
  }
 },
 // 类似 vue 里的 mothods(异步方法) -------- 以下7行为新增
 actions: {
  updateNameAsync ({ commit }) {
   setTimeout(() => {
    commit('updateName')
   }, 1000)
  }
 }
})
로그인 후 복사

아래 코드를 수정합니다. 우리는 이것을 우리 vue 페이지에서 사용할 수 있습니다

methods: {
  rename () {
    this.$store.dispatch('updateNameAsync')
  }
}
로그인 후 복사

3. Module Modularization

프로젝트가 점점 커지면 단일 스토어 파일은 확실히 우리가 원하는 것이 아니기 때문에 src가 있다고 가정합니다. /store 디렉터리에 2개의 파일이 있습니다

moduleA.js

export default {
  state: { ... },
  getters: { ... },
  mutations: { ... },
  actions: { ... }
}
로그인 후 복사
로그인 후 복사

moduleB.js

export default {
  state: { ... },
  getters: { ... },
  mutations: { ... },
  actions: { ... }
}
로그인 후 복사
로그인 후 복사

그러면 index.js를 this

import moduleA from './moduleA'
import moduleB from './moduleB'
export default new Vuex.Store({
  modules: {
    moduleA,
    moduleB
  }
})
로그인 후 복사

로 변경할 수 있습니다. 이 글의 사례를 읽으신 후 방법을 마스터하셨으리라 믿습니다. 앞으로 더욱 흥미진진해질 것입니다. PHP 중국어 웹사이트의 다른 관련 기사도 주목해주세요!

추천 도서:

v-model을 사용하는 방법과 vue 팝업 구성 요소 구현을 약속하는 방법

JS를 사용하여 파일 드래그 앤 드롭 업로드를 구현하는 방법

위 내용은 Vuex를 고급으로 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!