使用传播算子进行操作的原因是什么?

时间:2019-03-08 21:28:35

标签: vue.js vuex

为什么只有一个属性,而无需使用传播运算符就可以执行操作?还有为什么当我们拥有多个属性时,如果不使用传播运算符就无法执行操作?

换句话说:

为什么这是真的

methods:{
mapActions(["fetchImages"])
},

但这不是真的:

methods:{
mapActions(["fetchImages"]),
a:10
},

1 个答案:

答案 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']),
}

mapGettersmapState也是如此。

Vuex Docs解释得很清楚,但在mapGetter中却没有,但第一件事是:mapState。