Vuex之state和getters

store 常規(guī)使用方式

直接在 new Vuex.store 選項(xiàng)中去寫,不太好,常規(guī)方式是

創(chuàng)建文件

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

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

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

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

分模塊寫

// state.js 數(shù)據(jù)
export default {
  count: 0
}
// mutations.js 操作
export default {
  updateCount (state, num) {
    state.count = num
  }
}

主入口引入

// store.js
import Vuex from 'vuex'

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

export default () => {
  return new Vuex.Store({
    state: defaultState, // 這里因?yàn)橛蟹?wù)端渲染,渲染時(shí),會(huì)有部分?jǐn)?shù)據(jù)傳到客戶端,這是會(huì)有覆蓋數(shù)據(jù)的操作,所以 defaultState 只是默認(rèn)狀態(tài),不是真正的狀態(tài)。
    mutations // es6特性,簡(jiǎn)寫;操作都是相通的,不需要 default 標(biāo)明
  })
}

getters

getters 和 組件的 computed 類似,方便直接生成一些可以直接用的數(shù)據(jù)。當(dāng)組裝的數(shù)據(jù)要在多個(gè)頁面使用時(shí),就可以使用 getters 來做。

創(chuàng)建文件夾及文件

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

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

聲明 getters

// getters.js
export default {
  fullName (state) {
    return `${state.firstName} ${state.lastName}`
  }
}

引入 getters

// store.js
import Vuex from 'vuex'

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 // 這里
  })
}

使用 getters

// app.vue
<template>
  <div id="app">
    <p>{{fullName}}</p>
  </div>
</template>

<script>
export default {
  computed: {
    fullName () {
      return this.$store.getters.fullName
    }
  }
}
</script>

簡(jiǎn)寫幫助方法

babel 默認(rèn)不支持 ... 解構(gòu)語法的,未定稿的語法

安裝 babel-preset-stage-1

npm i babel-preset-stage-1 -D

級(jí)別最高的一種。

// .babelrc
{
  "presets": [
    "env",
    "stage-1" // 添加配置
  ],
  "plugins": [
    "transform-vue-jsx",
    "syntax-dynamic-import"
  ]
}

mapState 簡(jiǎn)寫

// app.vue
<template>
  <div id="app">
    <p>{{fullName}} {{count}}</p>
  </div>
</template>

<script>
import {
  mapState
  // mapGetters
} from 'vuex'

export default {
  computed: {
    ...mapState(['count']), // 同名直接用數(shù)組
    fullName () {
      return this.$store.getters.fullName
    }
  }
}
</script>

不同名的話,用對(duì)象

...mapState({
      counter: 'count'
    }),

或者用函數(shù)

...mapState({
      counter: (state) => state.count
    }),

mapGetters 簡(jiǎn)寫

與 mapState 類似

...mapGetters(['fullName'])

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • —————————————————————————————————————————————————————————...
    Kuro233333閱讀 940評(píng)論 0 0
  • vuex是什么鬼? 如果你用過redux就能很快的理解vuex是個(gè)什么鬼東西了。他是vuejs用來管理狀態(tài)的插件。...
    麥子_FE閱讀 7,018評(píng)論 3 37
  • Vuex 概念篇 Vuex 是什么? Vuex 是一個(gè)專為 Vue.js 應(yīng)用程序開發(fā)的狀態(tài)管理模式。它采用集中式...
    Junting閱讀 3,184評(píng)論 0 43
  • Vuex是什么? Vuex 是一個(gè)專為 Vue.js應(yīng)用程序開發(fā)的狀態(tài)管理模式。它采用集中式存儲(chǔ)管理應(yīng)用的所有組件...
    蕭玄辭閱讀 3,241評(píng)論 0 6
  • vuex 場(chǎng)景重現(xiàn):一個(gè)用戶在注冊(cè)頁面注冊(cè)了手機(jī)號(hào)碼,跳轉(zhuǎn)到登錄頁面也想拿到這個(gè)手機(jī)號(hào)碼,你可以通過vue的組件化...
    sunny519111閱讀 8,167評(píng)論 4 111

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