ES6中的解构赋值
解构的定义
类似于正则表达式,用一个有规则的表达式去匹配一个对象,等式的左边是一个表达式,右边是一个对象
简单的对象结构
//左边表达式和右边对象的进行匹配,将匹配的值赋给左边冒号后面的变量
let [属性2:attr2,属性1:attr1,属性3:attr3]={属性1:x,属性2:xx,属性3:xxx}
//左边还可以设置默认值,如果右边没有匹配到,则用默认值
let {newName:nm='whn',oldName:om,midName:mn='yml'}={oldName:'小王',newName:null,midName:undefined}
console.log(nm)//匹配到了null,所以才不是whn
console.log(om)//小王
console.log(mn)//没匹配上所以用了默认值yml
复杂的对象结构
这里的对象为函数返回的对象
function getPerson(na,num) {
return {
name: 'jack'+na,
age: 19+num
}
}
let { name, age } = getPerson('123',1);
console.log(name);//jack123
console.log(age);//20
如果将函数中的形参写为对象的形式,那么下面调用函数也要传递一个对象
function getPerson({na,num}) {
return {
name: 'jack'+na,
age: 19+num
}
}
let { name, age } = getPerson({na:'123',num:1});
console.log(name);//jack123
console.log(age);//20
更进阶,定义一个对象,对象里面有commit属性,对应一个函数1,将这个对象传入另外一个函数2中,返回对象中的commit函数。调用函数2的时候,参数是一个对象,对象里有一个commit属性
let obj = {
commit:function(na,num){
return {
name:'jack' +na,
age:19+num
}
}
}
function getPerson(obj){
return obj.commit('123',1)
}
let {name,age} = getPerson(obj)
//这里getPerson(obj)返回的是一个对象{name: 'jack123', age: 20 }
//getPerson()实际上是在执行obj.commit()这个函数
console.log(getPerson(obj)) //{ name: 'jack123', age: 20 }
console.log(obj.commit('th',8)) //{ name: 'jackth', age: 27 }
console.log(name) //jack123
console.log(age)//20
再次变形,函数的形参变为{commit},调用函数的时候传入实参obj,形参那里的{commit}可以将obj对象中的commit解析出来
let obj = {
commit:function(na,num){
return {
name:'jack' +na,
age:19+num
}
}
}
function getPerson({commit}){
return commit('123',1)
}
let {name,age} = getPerson(obj)//这里要传入实参
遇到的问题的
const actions = {
// 通过api里面的接口函数调用,向服务器发送请求,获取服务器的数据
async categoryList({commit}) {
let result = await reqCategoryList()
if(result.code == 200){
commit("CATEGORYLIST",result.data)
}
}
}
本来categoryList中的参数应该是context对象,context对象中包含{state, getters,commit}等等属性其中commit属性,这个属性是一个函数,这个commit函数有两个参数,type是mutation中的名字,payload表示参数。(这样写就相当于直接取出了context中的commit属性)

浙公网安备 33010602011771号