反应本机循环Json响应

时间:2020-03-27 08:05:27

标签: javascript react-native undefined

我有一个像这样的json数据,但出现错误,如何解决?我的代码: 我想在“节点”中显示数据,但是首先我想在console.log中检查它,但是出现错误

constructor(props){
        super(props);
        this.state = {
            kasus_baru: {},
            isError : false,
            isLoading : true,
        };

    }

axios.get('xxxxxx')
    .then(res=>{
        const data_kasus = res.data;

        this.setState({kasus_baru : data_kasus });
        //console.log(this.state.kasus_baru)
        this.state.kasus_baru.nodes.map((obj,i) => {
            console.log(obj[i].kasus);
        }); 
    })

这是答复:

{
"data": {
    "nodes": [{
            "id": 1,
            "kasus": 1,
            "klaster": "DKI JAKARTA",
        },
        {
            "id": 2,
            "kasus": 2,
            "klaster": "DKI JAKARTA",
        }
    ]
}

}

为什么会出现此错误?

[未处理的承诺拒绝:TypeError:未定义不是对象 (评估“ _this2.state.kasus_baru.nodes.map”)]

3 个答案:

答案 0 :(得分:0)

出现错误的原因是,您尝试映射的对象未定义。

this.state。 kasus_baru .nodes.map((obj,i)=> { console.log(obj [i] .kasus); });

我强烈建议您调试代码,并确保JSON响应有效,并且在访问对象属性时,请确认它们存在。

意思是,检查.nodes是kasus_baru的实际属性。

您可以使用

kasus_baru.hasOwnProperty("nodes")

此外,如果响应中有对象,为什么还要通过状态访问它?

更新(由于OP的评论)

您遇到的问题不是循环,而是遍历节点,而是看到从请求中接收到的数据是有效的。

为此,我将执行以下操作:

axios.get('xxxxxx')
.then(res=>{
    const data_kasus = res.data;
    if (data_kasus.hasOwnProperty('nodes')) {
      var nodes = data_kasus['nodes'];
      for(let index = 0; index < nodes.length; index++) {
           var node = nodes[index];
           //Do your logic here...
      } //end for
    } // end if
})

答案 1 :(得分:0)

向我显示您尝试访问对象的代码。如该响应所述,您正在尝试访问其键在当前对象中不存在的对象。例如,您尝试访问

之类的密钥

data.nodes.id将引发异常。您需要访问它data.nodes [index] .id

答案 2 :(得分:0)

我已经解决了这个问题, 答案是我必须在得到响应后添加.data

.then(res=>{
        const data_kasus = res.data.data;
})

响应数据:

{
"data": {
    "nodes": [{
            "id": 1,
            "kasus": 1,
            "klaster": "DKI JAKARTA",
        },
        {
            "id": 2,
            "kasus": 2,
            "klaster": "DKI JAKARTA",
        }
    ]
}

因为json响应具有数据密钥。

感谢所有帮助我的人