Vuex之mutation和action

mutation

同步操作

基本使用

創(chuàng)建文件

創(chuàng)建 client/store/mutations/

創(chuàng)建 client/store/state/mutations.js

聲明 mutations

// mutaions.js
export default {
  updateCount (state, num) {
    state.count = num
  }
}

引用 mutations

// store.js
import defaultState from './state/state'
import mutations from './mutations/mutations' // 引用
import getters from './getters/getters'

export default () => {
  return new Vuex.Store({
    state: defaultState, 
    mutations, // 注入
    getters
  })
}

使用 mutaions

<template>
  <div id="app">
    <p>{{count}}</p>
</template>
<script>
export default {
  mounted () {
    let i = 1
    setInterval(() => {
      this.$store.commit('updateCount', i++)
    }, 1000)
  },
    computed: {
        ...mapState({
          counter: (state) => state.count
        })
      }
}
</script>

mutations傳多個參數(shù)

commit 方法只能接受兩個參數(shù),第一個參數(shù)是 state,第二參數(shù),以對象的形式傳。

// app.vue
<script>
export default {
  mounted () {
    console.log(this.$store)
    let i = 1
    setInterval(() => {
      this.$store.commit('updateCount', {
        num: i++,
        num2: 2
      })
    }, 1000)
  }
}
</script>
export default {
  updateCount (state, { num, num2 }) { // es6 解構(gòu)
    console.log(num2) // 打印出 2
    state.count = num
  }
}

store 使用規(guī)范

我們可以不通過 commit 來進行操作,但官方推薦都通過 commit,所以盡量杜絕不通過 commit 的操作。

通過設置生產(chǎn)環(huán)境嚴格模式,來進行代碼規(guī)范。

import Vuex from 'vuex'

import defaultState from './state/state'
import mutations from './mutations/mutations'
import getters from './getters/getters'

const isDev = process.env.NODE_ENV === 'development' // 注意,正式環(huán)境不能使用 strict
export default () => {
  return new Vuex.Store({
    strict: isDev, // 添加嚴格模式
    state: defaultState, 
    mutations,
    getters
  })
}

actions

異步操作

基本使用

創(chuàng)建文件

創(chuàng)建 client/store/actions/

創(chuàng)建 client/store/state/actions.js

聲明 actions

// actions.js
export default {
  updateCountAsync (store, data) {
    setTimeout(() => {
      store.commit('updateCount', {
        num: data.num
      })
    }, data.time)
  }
}

引用 actions

// store.js
import defaultState from './state/state'
import mutations from './mutations/mutations' // 引用
import getters from './getters/getters'
import actions from './actions/actions'

export default () => {
  return new Vuex.Store({
    state: defaultState, 
    mutations, 
    getters,
    actions // 注入
  })
}

使用 actions

<template>
  <div id="app">
    <p>{{count}}</p>
</template>
<script>
export default {
  mounted () {
   this.$store.dispatch('updateCountAsync', {
      num: 5,
      time: 2000
    })
  },
    computed: {
        ...mapState({
          counter: (state) => state.count
        })
      }
}
</script>

簡寫幫助方法

mapMutations 和 mapActions

<script>
import {
  mapState,
  mapGetters,
  mapActions,
  mapMutations
} from 'vuex'
export default {
  mounted () {
    let i = 1
    setInterval(() => {
      this.updateCount({  // 調(diào)用方式也變了
        num: i++,
        num2: 2
      })
    }, 1000)
    this.updateCountAsync({ // 調(diào)用方式也變了
      num: 5,
      time: 2000
    })
  },
  computed: {
    ...mapState({
      counter: (state) => state.count
    }),
    ...mapGetters(['fullName'])
  },
  methods: {
    ...mapActions(['updateCountAsync']), // actions 簡寫
    ...mapMutations(['updateCount']) // mutations 簡寫
  }
}
</script>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 安裝 npm npm install vuex --save 在一個模塊化的打包系統(tǒng)中,您必須顯式地通過Vue.u...
    蕭玄辭閱讀 3,052評論 0 7
  • vuex是什么鬼? 如果你用過redux就能很快的理解vuex是個什么鬼東西了。他是vuejs用來管理狀態(tài)的插件。...
    麥子_FE閱讀 7,018評論 3 37
  • Vuex是什么? Vuex 是一個專為 Vue.js應用程序開發(fā)的狀態(tài)管理模式。它采用集中式存儲管理應用的所有組件...
    蕭玄辭閱讀 3,241評論 0 6
  • 姓名:岳沁 學號:17101223458 轉(zhuǎn)載自:http://blog.csdn.net/h5_queensty...
    丘之心閱讀 2,219評論 0 1
  • vuex 場景重現(xiàn):一個用戶在注冊頁面注冊了手機號碼,跳轉(zhuǎn)到登錄頁面也想拿到這個手機號碼,你可以通過vue的組件化...
    sunny519111閱讀 8,167評論 4 111

友情鏈接更多精彩內(nèi)容