开发者问题收集

React Native 循环 Json 响应

2020-03-27
142

我有这样的 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",
        }
    ]
}

>

为什么会出现此错误?

[Unhandled promise rejection: TypeError: undefined is not an object (evaluating '_this2.state.kasus_baru.nodes.map')]

3个回答

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

data.nodes.id 这样的键,这将引发异常。您需要访问它 data.nodes[index].id

Sudeep Dasgupta
2020-03-27

您收到错误的原因是您尝试映射的对象未定义。

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
})
tomerpacific
2020-03-27

我已经解决了这个问题, 答案是我必须在收到响应后添加 .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 响应有数据键。

谢谢大家的帮助

KaretNasiPadang
2020-03-28