javascript - 当我想访问对象详细信息时,React JS 抛出“TypeError:无法读取未定义的属性‘名称’”错误
问题描述
当我单击我的用户列表时,我想以模式显示我的用户详细信息。我将用户 ID 作为道具传递给模态,在模态中我通过 javascript find() 方法和 user_id 找到用户。此方法将我请求的用户作为对象返回,我可以通过 console.log() 显示它,但是当我想访问对象属性时,例如“user.name”或“user.email”反应抛出错误:TypeError:不能读取未定义的属性“名称”
//users.js code part
{ showUserDetails ? <div className="ModalContainer" >
<div className="userModal">
<div className="modalBody">
<span className="close">X</span>
<SelectedUser selectedUserId={selectedUserId}/>
</div>
</div>
</div> : <div></div>
}
// SelectedUser.js codes
import React from 'react';
import { connect } from "react-redux";
import { withRouter } from "react-router-dom";
const SelectedUser = ({selectedUserId, users}) => {
let user = users.find(user=> user.id === selectedUserId)
console.log(user.name)
return (
<React.Fragment>
<p><b>Name:</b> {user.name}</p>
<p><b>User Name:</b> {user.username}</p>
<p><b>Email:</b> {user.email}</p>
<p>
<b>Address:</b>
{` ${user.address.suite}, ${user.address.street}, ${user.address.city}
[zip Code: ${user.address.zipcode}]
`}
</p>
<p><b>Phone: </b>{user.phone}</p>
<p><b>WebSite: </b>{user.website}</p>
<p><b>Company: </b>{user.company.name}</p>
</React.Fragment>
);
}
const mapStateToProps = state => ({
users: Object.values(state.users.users)
})
export default withRouter(connect(mapStateToProps)(SelectedUser));
解决方案
在 SelectedUser 组件中,您应该在渲染之前检查用户状态是否可用。
import React from 'react';
import { connect } from "react-redux";
import { withRouter } from "react-router-dom";
const SelectedUser = ({selectedUserId, users}) => {
let user;
let content;
if(users && users.length > 0){
user = users.find(user=> user.id === selectedUserId);
} else {
return <div>Loading....</div>
}
if(Object.keys(user).length >= 0){
content = (<React.Fragment>
<p><b>Name:</b> {user.name}</p>
<p><b>User Name:</b> {user.username}</p>
<p><b>Email:</b> {user.email}</p>
<p>
<b>Address:</b>
{` ${user.address.suite}, ${user.address.street}, ${user.address.city}
[zip Code: ${user.address.zipcode}]
`}
</p>
<p><b>Phone: </b>{user.phone}</p>
<p><b>WebSite: </b>{user.website}</p>
<p><b>Company: </b>{user.company.name}</p>
</React.Fragment>)
} else {
content = "Loading"
}
return(
<div>{content}</div>
)
}
const mapStateToProps = state => ({
users: Object.values(state.users.users)
})
export default withRouter(connect(mapStateToProps)(SelectedUser));
推荐阅读
- nginx - nginx 从 www 问题重定向
- android - 启用后,Crashlytics 在控制台中停留在加载状态
- reactjs - 如何使用带有 redux-persist 的反应工具包清除任何持久状态
- python - Textfsm 为 Quanta 交换机创建模板
- python - 执行python函数的API调用
- angular - 根据选择动态选中/取消选中复选框
- python - 气流内存过载,一切都过时了
- python - How to change a value of HttpRequest.body in django?
- graphql - 如何使用graphql查询strapi中的富文本字段?
- architecture - Semver:在 Web 应用程序中引入了新的重定向,我需要增加主要版本吗?