React/Javascript,不能访问对象中的字段
React/Javascript, can't access fields in object
我正在React中构建一个组件,并通过props传递一个user
对象。在渲染方法中,我调用{this.props.user}
并将5huttotw@gmail.comhuttotwHello, world!
作为视图中的字符串返回,这是预期的(我想)。但是,我不能访问this.props.user.email
或对象中的任何其他字段。
当对象输出到控制台时,它看起来像这样:
Object
bio: "Hello, world!"
email: "huttotw@gmail.com"
first_name: ""
id: 5
last_name: ""
username: "huttotw"
Object Prototype
字段在那里,但是当我试图访问其中一个字段时,我得到
TypeError: null不是一个对象(求值'this.props.user.email')
注意:我在render
方法中把console.log(this.props.user)
放在return
之前。它记录两次日志,一次作为null
,一次作为Object
。
我的渲染方法:
render() {
console.log(this.props.user); // Outputs null then the Object
return (
<div className="row">
<div className="col-sm-offset-3 col-sm-6">
<div className="panel panel-primary">
<div className="panel-body">
<h3>Congratulations!</h3>
<ul>
<li>Your token is: <strong>{this.props.token.access_token}</strong></li>
<li>Your refresh token is: <strong>{this.props.token.refresh_token}</strong></li>
<li>Your scope is: <strong>{this.props.token.scope}</strong></li>
<li>Your token expires in: <strong>{this.props.token.expires_in}</strong></li>
</ul>
<p>{this.props.user.email}</p> // Type Error null is not an object.
</div>
</div>
</div>
</div>
);
}
我对令牌使用相同的策略,但不同之处在于user
对象是API调用的结果,token
在本地存储中。
两个道具都来自AuthenticatedComponent
,它跟踪tokens
和users
,以知道用户是否登录。token
和user
保存在存储中,但如果用户还不在存储中,我们必须在登录后从数据库中检索它。
我怎么能等到对象在视图中访问它之前?
看起来你两次渲染组件,而第一次没有传递用户对象。
要么让你的组件在没有数据的情况下工作,要么在没有数据可用的情况下不渲染它。后者更可取。所有这些都是基于组件在用户数据可用时呈现的假设。
假设该组件由另一个组件组成,您可以在JSX中使用条件操作符轻松地完成此操作:
let user = // get user data
return (
<div>
// possible other components
// ...
{user ? // if user is available
<MyComponent user={user} /> : // render component
null // otherwise render null
}
</div>
);
如果你的逻辑更复杂,使用if
语句:
let user = // get user data
let userComponent = null;
if (user) {
// whatever other complex logic
userComponent = <MyComponent user={user} />;
}
return (
<div>
// possible other components
// ...
{userComponent}
</div>
);
注意,这些都不是特定于React或JSX的。你在这里所做的就是决定(使用标准JavaScript)传递哪个值:React组件还是null
。
- 如何创建具有默认值的JavaScript对象字段?(AngularJS模型相关)
- 如何在angularjs中传递对象字段作为指令参数
- 如何在初始化过程中引用同一对象内的对象字段
- 使用数组值作为对象字段名称
- 如何访问服务器数组响应中的对象字段
- Javascript 新对象字段未保存
- 如何访问原型上的阴影 JavaScript 对象字段
- 流星自动体形 - 禁用对象字段数组中的选择选项
- 猫鼬对象字段分配不起作用
- 通过更新整个对象来删除对象字段
- 可以't访问require.js中的依赖对象字段-无法读取未定义的属性
- AngularJS:使用ui选择时,如何选择对象字段
- AngularJS:根据内部数组对象字段进行过滤
- 按对象字段对对象数组进行排序
- 使用jquery映射对象字段
- 删除包含特定单词的对象/字段
- 在myObj.one.two.three.field中,当字段有2个或更多嵌套级别时,通过路径字符串获取对象字段
- meteor 39;s mongodb插入失败时存储GeoJSON对象字段"loc"
- Parse.com云功能-在发送到客户端之前手动修改对象字段
- 按匹配的对象字段数对对象数组进行排序