【发布时间】:2020-01-12 15:53:19
【问题描述】:
在父组件中,我呈现了一个用户列表。每个用户都是一个用户项子组件。 我映射了一个对象的状态数组,以将每个 listitem 呈现为用户。它渲染了正确数量的人,但数据是空的。
下面是我父组件的相关代码。
const Search = ({
auth: { isAuthenticated, user },
getUsers,
user: { users, loading }
}) => {
useEffect(() => {
getUsers();
console.log(sunData);
}, []);
const [filteredUsersList, setFilteredUsersList] = useState({
users: [],
isFetching: false
});
//FILTER usersList.users ACCORDING TO VALUES IN sunData ARRAY
useEffect(() => {
// update the usersList
const updatedUsersList = [];
// //foreach index de usersList, si usersList.users[i]
if (!usersAPIList) {
return console.log("isEmpty");
} else {
for (let [key, userInfo] of Object.entries(users)) {
//console.log(userInfo.username);
if (sunData.indexOf(userInfo.sun) !== -1) {
updatedUsersList.push(userInfo);
}
}
}
setFilteredUsersList({ users: updatedUsersList, isFetching: false });
console.log(updatedUsersList);
}, [sunData]);
return (
<div className="usersList">
<ul>
{filteredUsersList.users.map(userItem => (
<UserListItem user={userItem} />
))}
</ul>
</div>
);
};
Search.propTypes = {
getUsers: PropTypes.func.isRequired,
user: PropTypes.object.isRequired,
auth: PropTypes.object.isRequired
};
const mapStateToProps = state => ({
auth: state.auth,
user: state.user
});
export default connect(mapStateToProps, { getUsers })(Search);
这是子组件。
const UserListItem = ({
auth: { isAuthenticated },
user: { username, sun, bio, canBeMessaged },
getUserById
}) => {
return (
<li>
<div className="namephoto">
<img src={DefaultIcon} alt="Default avatar" />
</div>
<div className="userListInfo">
<h1>{username}</h1>
{sun}
<div className="userListBio">{bio}</div>
</div>
<div className="userListActions">
{canBeMessaged ? <i class="fas fa-envelope"></i> : ""}
<i class="fas fa-plus-circle"></i>
</div>
</li>
);
};
UserListItem.propTypes = {
auth: PropTypes.object.isRequired,
user: PropTypes.object.isRequired,
getUsersById: PropTypes.func.isRequired
};
const mapStateToProps = state => ({
auth: state.auth,
user: state.user
});
export default connect(mapStateToProps, { getUserById })(UserListItem);
filteredUsersList.users 也正确记录。我看不出问题出在哪里以及为什么数据不会显示在 listitem 中。
【问题讨论】:
-
您是否尝试在您的子组件中记录
username, sun, bio, canBeMessaged? -
@Hurobaki 我做了,它是未定义的
-
那么您的问题来自您的 Parent 组件。你能告诉我
filteredUsersList的输出吗?并尝试在.map方法中记录userItem? -
尝试在
UserListItem中将user属性命名为userDetails。例如。<UserListItem userDetails={userItem} />- 我认为 redux 正在覆盖您的用户属性,因为您在 UserListItem 组件的末尾声明了mapStateToProps。 -
@Hurobaki 我用输出截图编辑了问题
标签: javascript reactjs ecmascript-6 redux