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属性)

posted @ 2022-04-26 16:41  采姑娘的小蘑菇ii  阅读(68)  评论(0)    收藏  举报