vuex中state中的数据在使用的时候,一般都是在computed中定义的,以为在data中定义的话是一次性的,不会随着vuex中数据变化而变化,虽然可以通过watch监听,但是很麻烦,如下:
//在计算属性中
computed:{
...mapState([
//必须带引号
'menuStatus'
])
}
computed: {
...mapState({
userInfo: state => state.user.userInfo,
avatar: state => state.user.avatar
}),
...mapGetters([
'company'
])
},
引入
import { mapGetters } from "vuex";
如果一个变量或对象需要在多个页面和组件中使用,那么,可以使用mapGetters。
computed: {
...mapGetters(["freeShipping"])
} ,
computed: mapGetters(["userInfo","freeShipping"]),
3,页面变量取用
{{freeShipping.value}}
//state的作用是存储公共数据
//state是响应式的,如果修改了属性,那么在相对应,组件视图上的值也会改变
//在store里定义格式
new Vuex.store({
state: {
属性名: 属性值
}
})
//在组件中使用格式
this.$store.state.属性名
//在模板中可省略this
{{$store.state.属性名}}
//在组件中使用map辅助函数:
computed: {
...mapState(['属性名']),
...mapState({'新名字': '属性名'})
}
没有解构的
actions: {
increment (context) {
context.commit('increment')
}
}
ES2015参数解构 (opens new window)的简化代码
actions: {
increment ({ commit }) {
commit('increment')
}
}
在vue组件中get
import { mapGetters } from 'vuex'
export default {
computed: {
...mapGetters(['number']),
},
mounted () {
this.$store.dispatch('setNumber',10).then(() => {
console.log(this.number)
})
}
}