今天遇到一个吭,最后使用vue mapState得以解决。
之前有说过使用mapState语法糖,在这里直接用computed返回竟然不行。然后在官网有看到相关说明:进入官网。
下面介绍一下mapState的用法。
computed: {
...mapState(['city'])
}
首先,传统的写法,computed接受的形式为
computed: {
city: function () {
return '北京'
}
}
computed: {
city () {
return '北京'
}
}
那么mapState的作用相当于,生成了
{
city: funtion() {return '上海'}
}
…是对象展开运算符,下面的例子可以使你更好的理解他的作用
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function sum(x, y, z) {
return x + y + z;
}
const numbers = [1, 2, 3];
console.log(sum(...numbers));
let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
x
y
z
let obj = { a: { b: 1 } };
let { ...x } = obj;
obj.a.b = 2;
x.a.b
a = {a:1}
c = {b:2, ...a}a:1
c
继续讲mapState,本身,官方的写法是
computed: mapState({
count: state => state.count,
count: (state) => {return state.count}
countAlias: 'count',
countPlusLocalState (state) {
return state.count + this.localCount
}
})
当映射的计算属性的名称与 state 的子节点名称相同时,我们也可以给 mapState 传一个字符串数组,如下
computed:mapState(['city'])
因为…(对象展开运算符)的原因,可以将mapState写在computed对象内部,(这样可以方便添加其他属性)如下
computed: {
add () {return 'add...'},
...mapState(['city'])
}
|