React + Axios: Uncaught (in promise) TypeError: Cannot read property 'map' of undefined
尝试通过简单的Axios教程开始习惯于填充动态数据。在React
中加载和使用外部数据
由于用本地主机访问Codepen违反了CORS,因此我不得不创建一个JSON Web服务器。
App.jsx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | var App = React.createClass({ getInitialState: function(){ return{ users: [] }; }, componentDidMount: function(){ var _this = this; this.serverRequest = axios .get("http://localhost:3004/users") .then(function(results){ console.log(results.data); _this.setState({ users: results.data.users }); }); }, componentWillUnmount: function(){ //... }, render: function(){ return( Returning Users: {this.state.users.map(function(user) { return ( {user.name} ); })} ); } }); export default App; |
我知道应该将数据外推到Redux之类的东西,但这只是开始使用动态数据。我得到的错误是
我看到,如果将数据预填充到
编辑:
Console.log图片:
因为最初用户状态为空,所以willmount方法在这里什么也没做,所以直接转到render方法,然后转到didmount,在render方法中,它试图用未定义的值映射用户状态,从而导致错误,我认为您应该检查用户状态是否未定义。直接在render方法中检查它,或创建一个用于渲染映射的函数。 (假设方法名称为renderUser),则可以将方法直接提取为{this.renderUser()}
将您的setState更改为此,
1 2 3 | _this.setState({ users: results.data }); |
如果您看到控制台输出的结果。它不包含"关键用户",因此不包含
1 2 3 | _this.setState({ users: results.data.users }); |
会将状态用户设置为undefined,因此您得到
将setState更改为
1 2 3 | _this.setState({ users: results.data }); |