【发布时间】:2018-09-27 10:23:20
【问题描述】:
当我在获取 axios 请求后尝试 setState 时,似乎我没有准备好呈现数据。在控制台中,我收到了响应,但无法访问该状态下的响应。
import React, { Component } from 'react';
import axios from 'axios';
import { Grid, Row, Col } from 'react-flexbox-grid';
import Avatar from '@material-ui/core/Avatar';
import Button from '@material-ui/core/Button';
import stylefile from './stylefile';
import AppBar from '@material-ui/core/AppBar';
import Toolbar from '@material-ui/core/Toolbar';
import { withStyles } from '@material-ui/core/styles';
import '../App.css';
class TitleBar extends Component {
constructor() {
super();
this.state ={
data:[],
}
}
componentDidMount() {
axios.get('http://api.abc',
{
headers: { "Postman-Token": "abc"}
})
.then((response) => {
console.log(response.data);
this.setState({
data: response.data,
})
})
.catch((error) => {
console.log(error)
})
}
render() {
const { classes } = this.props;
console.log(this.state.data,"data response")
return (
<div>
{
this.state.data.map(((item,key) => (
<div>
//
</div>
)))}
</div>
);
}
}
export default withStyles(stylefile)(TitleBar);
console.log(error);
});
}
//console.log(this.state.data) -- 未定义
【问题讨论】:
-
你在哪里以及如何检查这样的状态?
-
注意在 ComponentWillMount() 中使用 setState。当你在那里使用 setState 时,React 不会触发重新渲染,那么应用程序就不会看到状态中的 response.data。
-
正如我在提供的答案的 cmets 中所说,我同意这里的建议,但如果
setState在异步作业之后完成,componentWillMount会触发渲染。这就是为什么我想知道 OP 在哪里使用console.log。 -
那么,你能在你的获取请求中看到你的数据吗?
console.log(response.data);另外,你在你的render方法中记录了它,你说它是undefined here,对吧? -
完全是@devserkan先生
标签: javascript reactjs axios