1. 程式人生 > >vue:vuex

vue:vuex

如何使用vuex、使用store中的資料、替換store中的資料?
  vuex大家都不陌生,比如我在一個store的state中儲存了items為一個空陣列,然後在元件中迴圈陣列中的每一個元素並展示出來,然後再通過axios獲取到資料之後更新store,這樣陣列中就有元素了。
  最開始我使用的思路如下所示:

const state = {
  totalPrice:  0,
  items: [],
 //.... 其他的state
}

然後通過axois獲取items,獲取到之後更新:

  .then(function (response) {
    if (response.data.code == 130) {
      items = response.data.data;
      console.log(items);
      store.commit('update', items);
    }

其中的update已經在mutation中定義了,因為我們知道vue中的state只能通過commit這一種方式來替換而不能通過其他方式,如下:

mutations: {
    update (state, items) {
    state.items = items;
    }
}

最後,我們需要把items掛載到元件下:

  data: function () {
      return {
        name: "CommodityKinds",
     items: this.$store.state.items
      }
    },

說明:因為我已經將store註冊到根元件下了,所以我們可以在元件中使用 this.$store.state來訪問到state物件。
  但是,這樣是有問題的 — 我們會發現,進入有items資料的頁面後, 資料並沒有被渲染出來,而是等到我們切換頁面,再切換回來的時候才能渲染出來。
  而問題就出現在了最後一步!
  我們應該將store中的資料放在computed下而不是放在data下!!!!
  具體解決方法如下:

  import {mapState} from 'vuex'

然後:

computed: mapState({
  items: state => state.items
})

這樣,當store中的資料改變時, 就會直接改變了,更多例子可以看vuex官方文件,講的很好。
總結: 一般而言,我們需要將store下的state放在computed中,將元件自身的state,不需要像vuex這樣動態的、傳遞的放在 data 下即可。