vue.js 之 vuex 中的 state 使用

state

  • 我們先來看一個簡單的state實例使用
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.Store({
  state: {
count: 0
  }
})
  • 那么我們應(yīng)該如何在vue組件中展示狀態(tài)呢?由于Vuex的狀態(tài)存儲是響應(yīng)式的,從store實例中讀取狀態(tài)最簡單的方法就是在計算屬性中返回某個狀態(tài),如下:
//創(chuàng)建一個Counter組件
const Counter = {
    data() { return {} },
    template: `<div>{{ count }}</div>`,
    computed: {
        count () {
          return store.state.count
      }    
    }
  }
  • 每當(dāng) store.state.count 變化的時候,都會重新求取計算屬性,并刷新界面。

需要注意的是如果你把 store.state.count 放在data中, store.state.count 的變化是不會主動觸發(fā)直接訪問帶store對象的,所以這樣寫五一是會報錯的。

這種模式依賴于全局的管理員 store ,如果模塊多了,意味著每個模塊或者頁面只要用到了這個state里面的數(shù)據(jù),都得把store一如進來,這樣的操作確實有點難受。當(dāng)然,官方肯定是不允許有這樣難受的操作出現(xiàn)的:

Vuex 通過store選項,提供了一種機制將狀態(tài)從根組件“注入”到每一個子組件中(需調(diào)用Vue.use(Vuex));

const app = new Vue({
  el:'#app'
  //把 store 對象提供給 “store” 選項,
  //這可以把 store 的實例注入所有的子組件
  store,
  //子組件
  components: { Counter },
  template:`
    <div class="app">
      <counter></counter>
    </div>
  `
})
  • 通過在根實例中注冊store選項,該store實例會注入到根組件下的所有子組件中,且子組件能通過this.$store訪問的。讓我們以前更新一下Counter的實現(xiàn):
const Counter = {
      template: `<div>{{ count }}</div>`,
      computed: {
      count () {
          return this.$store.state.count
    }
  }
} 
  • Vuex 的狀態(tài)固然好用,但是也不要濫用:

使用 Vuex 并不意味著你需要將所有的狀態(tài)放入 Vuex。雖然將所有的狀態(tài)放到 Vuex 會使?fàn)顟B(tài)變化更顯式和易調(diào)試,但也會使代碼變得冗長和不直觀。如果有些狀態(tài)嚴格屬于單個組件,最好還是作為組件的局部狀態(tài)。你應(yīng)該根據(jù)你的應(yīng)用開發(fā)需要進行權(quán)衡和確定。

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

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

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