react.js - 请问我遍历这种格式的数据为什么会报错呢,怀疑是this的问题,不知道怎么改

查看:99
本文介绍了react.js - 请问我遍历这种格式的数据为什么会报错呢,怀疑是this的问题,不知道怎么改的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

报错信息:

数据格式是这样的:遍历payload下的department的信息,以及department下的departments数组内的信息

这是我写的代码,请问我有些错吗,怀疑是this的问题

    renderDptName(){
        if (this.state.dptName != undefined){
            var dptname = this.state.dptName;
            var arr =[];
            this.mapDptChild(dptname,arr)
        }
        return arr;
    },
    mapDptChild(dpt,container,lvl){
        lvl = lvl || 0;
        var that = this;
        $.map(dpt,function (d,i) {
            var pid = d.pid || null;
            var key = pid+'-'+d.id;
            container.push(<li key={key}>{d.name}</li>)

            if (d.departments.length){
                $.map(d.departments,function (dd,i,rw) {
                    rw(dd,container,lvl+1)
                },that.mapDptChild)
            }
        }.bind(this))
    }

解决方案

本来觉得你这个可能不是技术问题,所以直接在评论里回复的。。。不过要写代码,我就在这里回复了。。。

先扯一下为什么不认为是this的问题?

由于你是在React里面写的,而且是ES5的写法,所以this一般都会自己绑定到组件本身的。

即使不这么看,你是通过this.mapDptChild来调用mapDptChild方法的。既然你能调用到这个方法,那么this.mapDptChild中的this肯定是组件本身,由此判断mapDptChild中的this也是组件本身。

最后一点,就是你在mapDptChild中就没有怎么用到this,更和length属性无关,所以肯定不是this的问题。

分析一下错误,

  1. 由于错误是报的length of undefined,所以我猜是d.departments.length那里的报错(如果不是,请点出哪里报的错),所以可以得出d.departmentsundefined

  2. 为什么d里面没有departments啊,我觉得只可能,要么是dpt不是你图里面的department,要么就是某个department里面没有departments

建议方法

如果是d.departments.length处报错,那么就在if处进行判断,并输出,看看到底是哪个数据的问题。知道是什么问题以后,在根据情况修改。

if (d.departments == null) { console.log(d); }
if (d.departments.length){
    $.map(d.departments,function (dd,i,rw) {
        rw(dd,container,lvl+1)
    },that.mapDptChild)
}

这篇关于react.js - 请问我遍历这种格式的数据为什么会报错呢,怀疑是this的问题,不知道怎么改的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆