vue:vuex
阿新 • • 發佈:2018-11-21
如何使用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 下即可。