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>
)
}