setData()去设置一个不确定属性有多少个的对象,以及什么时候可以利用获取到新值,去请求接口?
发布于 5 年前 作者 chaotian 4728 次浏览 来自 问答

父组件获取到子组件传过来的对象{a:0,b:1,c:2…},对象属性个数不确定,然后通过setData()去设置,设置好后去请求接口,怎么做?

父组件:

triggerBySon(e){
    //这些值是通过子组件传过来的,通过e.detaile.detail获得,属性个数不确定
    //{free: 1, openType: 1, serviceProSet: "电信,移动"}
     let param = e.detaile.detail;
     for(let [key,value] of Object.entries(_param)){
            this.setData({
                [key]:value
            })
     }
     this.httpLoadData();  
},
httpLoadData(){
    let {
       free,
       openType,
       serviceProSet,
       dataLists,
       ...//其他数据
    } = this.data,
    param = {
       free,
       openType,
       serviceProSet,
       proName,
       ...//其他接口请求参数
    };
    _http.post('接口地址',param)//此处为自己封装好的接口请求函数
}

疑惑1:需要循环遍历子组件传递过来的对象,然后循环setData吗,这样循环调用是不是很消耗性能?

疑惑2:请求接口函数,跟set同步写,会获取到设置后的新值吗?

【基础库为1.9.0】

希望得到大佬们的解答,并且性能良好🙏

1 回复

疑惑1:

for循环里setData的确不推荐,数据量大的话会导致性能问题。上面的代码可以调整一下,先使用for循环将要setData的整个对象构造出来,for循环外只调用一次setData即可。

疑惑2:

可以的,改变data的值是同步的,但如果想在界面更新渲染完毕后才执行的操作,可以使用setData回调,this.setData({xxx}, callback)

回到顶部