Javascript 该国有资产被视为“国有资产”;“未定义”;

Javascript 该国有资产被视为“国有资产”;“未定义”;,javascript,reactjs,Javascript,Reactjs,我正在将数据从后端提取到前端。在我调用 let data=response.json(),然后调用const bartData=Object.entries(data)。因此,我正在创建一个数组,它保存原始对象的键/值对。然后我设置组件的状态this.setState({allStations:bartData}),其中属性allStations:[]。这就是问题所在-我希望通过视觉确认我获取了正确的数据,并以我希望的方式对其进行操作,因此我调用console.log(This.state.al

我正在将数据从后端提取到前端。在我调用
let data=response.json()
,然后调用
const bartData=Object.entries(data)
。因此,我正在创建一个数组,它保存原始对象的键/值对。然后我设置组件的状态
this.setState({allStations:bartData})
,其中属性
allStations:[]
。这就是问题所在-我希望通过视觉确认我获取了正确的数据,并以我希望的方式对其进行操作,因此我调用
console.log(This.state.allStations[0])
并提供正确的内容,但当我进一步查看
console.log(This.state.allStations[0][0]
时,我会收到一个错误,其中指出

此.state.allStations[0]未定义

为什么?? 另外,我发现我正在将一个数组放在一个数组中,这就是为什么我惊讶于
console.log(this.state.allStations[0])
提供了原始数组的内容。console.log(this.state.allStations)的图片


console.log(this.state.allStations[0])之前的渲染函数中
您应该检查状态值。 Render函数在从后端获取数据之前执行,我建议这样做

if(this.state.allStations) && console.log(this.state.allStations[0])

执行条件渲染以防止在发送响应之前显示数组

添加如下内容:

constructor(){
    super(props);
    this.state = {
       isLoading: true,
       allStations: []
    }
}
您需要使用React生命周期并将Fetch粘贴到内部:

componentWillMount(){
    fetch('/base-station-routes') // Already Async
    .then(res => res.json()) // Convert response to JSON
    .then(res => this.setState({ isLoading: false, allStations: res})) // you can call it bartData, but I like to stick with res
    .catch(err => { //.catch() handles errors
        console.error(err) 
    })
}
然后在渲染中:

render(){
    return( 
          <div>
              {this.state.isLoading ? <span>Still Loading</span> : // do a map here over your data}
          </div>
    )
}
render(){
报税表(
{this.state.isLoading?仍在加载://在您的数据上绘制地图}
)
}

这可以防止在您的响应出现之前对数据执行任何操作。

嘿,谢谢您的评论。请检查我的编辑,我正在发布This.state.allStations的图片。我认为您设置的状态不正确,请尝试
This.setState({allStations:[bartData]})
instead@Yeysides我修复了它。错误仍然显示这确实有帮助。但是,我还有另一个问题-在我的初始渲染中,allStations=[],但当我调用setState时,它应该会触发一个重新加载程序。为什么我的状态没有改变?为什么它仍然被认为是未定义的?@hello_那里-fetch已经是异步的,所以你可以用fetch(
/basestation routes
)执行它。然后(res=>res.json())。然后(res=>this.setState(//do stuff))。catch(//handle errors).我编辑了我的,是为了告诉你正确的方法。
render(){
    return( 
          <div>
              {this.state.isLoading ? <span>Still Loading</span> : // do a map here over your data}
          </div>
    )
}