为什么只有一个属性,而无需使用传播运算符就可以执行操作?还有为什么当我们拥有多个属性时,如果不使用传播运算符就无法执行操作?
换句话说:
为什么这是真的
methods:{
mapActions(["fetchImages"])
},
但这不是真的:
methods:{
mapActions(["fetchImages"]),
a:10
},
答案 0 :(得分:0)
您的观点是正确的,但示例是错误的。
这不是真的
methods:{
mapActions(["fetchImages"])
},
但这是真的:
methods: mapActions(["fetchImages"]),
mapActions返回对象包含几种方法,您不能像这样用{}包装对象-它会变成将对象放入另一个对象的内部。
清除示例:
mapActionsObj = { a: 1, b: 2, c: 3 }
let myMethod = {...mapActionsObj} // myMethod is { a: 1, b: 2, c: 3,}
let wrongMethod = {mapActionObj} // wrongMethod is { {a: 1, b: 2, c: 3} }
// not what you want
现在,回到您的问题。
实际上,当您没有任何本地方法属性时,您可以直接将mapActions
用作:methods: mapActions
,而无需使用扩展语法...
。
methods: {
...mapActions(['fetchImages']),
},
methods: mapActions(['fetchImages']),
以上两种功能完全相同!
但是当您具有任何本地方法属性时,则需要使用扩展语法。
这是因为mapActions返回一个对象。然后我们需要对象传播运算符将多个对象合并为一个。
methods: {
localMethod () { /* ... */ },
// we use ... Spread Operator here to merge the local method object with outer object
...mapActions(['deleteAll']),
}
mapGetters
,mapState
也是如此。
Vuex Docs解释得很清楚,但在mapGetter中却没有,但第一件事是:mapState。