vuex之state(一)
阿新 • • 發佈:2019-04-13
nta ava -s 調用 屬性 efault 傳遞 def {}
我的理解
個人認為,不用說得太過深奧,vuex其實就是把一個應用的某些數據統一管理起來,以便其他的組件更方便的操作該數據。
為什麽使用vuex
當項目結構越來越復雜,組件的多層嵌套使得數據傳遞非常繁瑣,並且難以維護,有了vuex,我們可以把一些數據的狀態統一管理起來,通過調用vuex暴漏出來的API,就可以簡單方便操作數據。非常方便。
基本使用
- 安裝
npm install vuex --save
- 創建store實例
- 我們在我們的項目 創建 一個 store.js 文件,註意在模塊化構建系統中,需要調用 Vue.use(Vuex),通過在根實例 vm(new Vue({ store }
- 我們在我們的項目 創建 一個 store.js 文件,註意在模塊化構建系統中,需要調用 Vue.use(Vuex),通過在根實例 vm(new Vue({ store }
//這裏我引入vue 直接指定了路徑 方法不唯一,只要能引入vue即可 import Vue from '../../node_modules/vue/dist/vue.js' //引入vuex import Vuex from 'vuex' //調用 Vue.use() Vue.use(Vuex) //創建store實例 const store = new Vuex.Store({ name: "車神-黃傑" }) //導出 store對象 export default store
- main.js文件
import Vue from '../..//node_modules/vue/dist/vue.js' import App from './App.vue' import store from './store.js' //創建vm實例 const vm = new Vue({ el: '#app', render(c){ return c(App) }, //在 vm註冊store store })
- state
- state就相當於 vue的data,就是定義一些公共的數據,這裏的數據每一個組件都可以訪問,此時在組件中 可以通過 $store.state.xxxx得到該數據。
//App組件
<template>
<h2>{{name}}</h2>
</template>
<script>
export default {
data(){
return {}
},
computed(){
name(){
return this.$store.state.name
}
}
}
</script>
<style lang="less" scoped></style>
mapState
不通過計算屬性返回狀態得到數據的方式,直接通過 $store.state.xxx也可以獲得數據,只不過當一個組件多處都用到該數據,這樣代碼就會顯得很臃腫,而通過計算屬性定義每一個數據也很不方便,因此官方提供 mapState函數來幫助我們更方便的把狀態映射成為組件的計算屬性。沒啥好測試的,直接用官網的例子,有以下幾種方式:
- 傳入對象
// 在單獨構建的版本中輔助函數為 Vuex.mapState
import { mapState } from 'vuex'
export default {
computed: mapState({
// 箭頭函數可使代碼更簡練
count: state => state.count,
// 傳字符串參數 'count' 等同於 `state => state.count`
countAlias: 'count',
// 為了能夠使用 `this` 獲取局部狀態,必須使用常規函數
countPlusLocalState (state) {
return state.count + this.localCount
}
})
}
- 此時計算屬性和state的節點名稱相同 此時傳入一個數組,裏面即為state數據名稱字符串
computed: mapState([
// 映射 this.count 為 store.state.count
'count'
])
- 當我們想要和局部的計算屬性一起使用,使用對象展開運算符...
computed: {
localComputed () { /* ... */ },
// 使用對象展開運算符將此對象混入到外部對象中
...mapState({
//這裏的寫法與傳入對象的寫法一致
}),
...mapState([
//這裏的寫法與傳入數組的寫法一致
])
}
註意
- 要想 通過this獲取局部狀態,只能使用常規函數,不能使用箭頭函數,我測試了一下,箭頭函數中的this為undefined。具體原因是箭頭函數this指向問題。有興趣可以去了解一下。
vuex之state(一)