无法读取未定义的属性图
2017-01-31
13008
由于某种原因,它有时会映射通过,但我收到另一个不返回任何内容的错误,而其他时候它只是说无法读取未定义的属性图。我正在尝试在 React 中编译一个用户列表。
我有一个名为 UserList 的组件,它正在查询我的数据库以查找所有用户并更新状态:
const UserList = React.createClass({
getInitialState: function () {
return {
users: []
}
},
componentDidMount: function () {
this.loadUsersFromServer();
},
loadUsersFromServer: function () {
axios.get('/api/users').then((users) => {
this.setState({users: users.data.users});
});
},
render: function () {
return (
<div>
<h1>User List</h1>
<User
users={this.state.users}
/>
</div>
);
},
});
然后我将它传递给它的子组件 User,这就是错误发生的地方:
const User = React.createClass({
render: function () {
console.log('props: ' + JSON.stringify(this.props.users));
const users = this.props.users.map((user) => {
return (
<User
key={user._id}
username={user.username}
/>
);
});
return (
<div id="users">
{users}
</div>
);
},
});
Chrome Dev 工具中有趣的是,由于某种原因,我在尝试打印出 this.props.users 时收到了三个日志,我不确定为什么它会输出三个日志,但中间的一个有我要查找的所有用户:
任何帮助将不胜感激!
2个回答
您可以尝试将用户渲染逻辑放入 UserList 类的方法中。类似这样的方法应该可行。
const UserList = React.createClass({
getInitialState: function () {
return {
users: []
}
},
componentDidMount: function () {
this.loadUsersFromServer();
},
loadUsersFromServer: function () {
axios.get('/api/users').then((users) => {
this.setState({users: users.data.users});
});
},
renderUsers: function (users) {
return <div>{users.map(user => <div key={user._id} username={user.username} />)}</div>
},
render: function () {
return (
<div>
<h1>User List</h1>
{ this.renderUsers(this.state.users) }
</div>
);
},
});
Tom Coughlin
2017-01-31
在某个时刻(第二次刷新)
this.props.users
看起来未定义,并且 map 函数无法处理它。
我使用
React.Component
语法重写了该示例,因为我从未使用过旧版 React(V0.13 之前)语法。
查看 此处 了解不同语法的更多信息。
但是,这部分:
const User = React.createClass({
render: function () {
console.log('props: ' + JSON.stringify(this.props.users));
const users = this.props.users.map((user) => {
return (
<User
key={user._id}
username={user.username}
/>
看起来很奇怪。我认为您在 User 中使用了 User。
这是我重写它的方式,由于我没有用户 axios,因此进行了一些小修改。
prosti
2017-01-31