【发布时间】:2017-01-31 17:27:12
【问题描述】:
由于某种原因,它有时会映射,但我得到另一个错误,即不返回任何内容,有时它只是说无法读取未定义的属性映射。我正在尝试在 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>
);
},
});
然后我将它传递给它的子组件用户,这就是错误发挥作用的地方:
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 开发工具的有趣之处在于,由于某种原因,我在尝试打印 this.props.users 时得到了三个日志,我不确定为什么它会注销三个,但中间的一个有所有我正在寻找的用户:
任何帮助将不胜感激!
【问题讨论】:
-
我自己对 React 很陌生,所以我主要是跟着看其他人的答案。但是,我正在使用 extends React.Component 语法,它为我提供了一个构造函数来用于初始状态。我没有尝试使用该语法呈现的空数组 [] 的问题。
-
是的,我的意思是我可以尝试我想......我只知道这是写同一件事的两种不同方式,所以我无法想象这会是问题所在。或者至少我有点希望问题不会是那样的哈。
-
在您的 User 类渲染方法中。您正在渲染一堆用户组件。这是某种我不太了解的递归自我引用。在你的地图函数中,你想返回一个 还是其他东西而不是
? -
第一次运行 map 函数时,您正在创建一个具有 'key' 和 'username' 属性的
组件,因此此时未定义 'users' 属性。 -
@TomCoughlin 啊...好点。我什至需要将它映射到一个组件中,还是我可以将它放入一个 div 中?
标签: javascript mongodb reactjs