【发布时间】:2016-07-18 19:05:12
【问题描述】:
我正在尝试在元素内渲染一个对象(react-bootstrap 中的面板元素)。
import React, { PropTypes } from 'react';
import { Panel } from 'react-bootstrap';
const NetworkDetail = React.createClass({
render () {
return (
<Panel header="Network Details" bsStyle="info">
{this.props.dataDetail && Object.keys(this.props.dataDetail).map(function(detail, id) {
return <span key={id}>{this.props.dataDetail[detail]}</span>;
}.bind(this))}
</Panel>
)
}
})
export default NetworkDetail
但这不起作用。抛出的错误是
Uncaught Invariant Violation: 对象作为 React 子对象无效 (找到:带有键 {self} 的对象)。如果你打算渲染一个集合 的孩子,使用数组代替或包装对象使用 来自 React 附加组件的 createFragment(object)。检查渲染方法 'NetworkDetail'。
我不明白的是,如果我使用
return <span key={id}>{this.props.dataDetail.myProperty}</span>;
它有效。
如何渲染对象的所有属性和值?
【问题讨论】:
-
您确定
props.dataDetails中的所有键都不能解析this.props.dataDetail[detail]中的对象吗? -
哦,span,
dataDetail对象实际上有一个名为_links的属性,它是一个对象...(应用程序使用 REST HATEOAS 后端)。如果这个_linksobject 是原因,我应该如何摆脱?也许使用 underscore.js(我实际上已经使用 underscore.js 重新格式化我的数据)? -
你可以使用Underscore的
omit函数来过滤_links。一个更好的选择可能是创建一个您想要渲染的键的列表,并改用 Underscore 的pick函数。见:underscorejs.org/#omit -
感谢您的帮助。我接受了下面的答案,但您完全解决了最初的问题(我的对象内的对象)。再次感谢。
标签: javascript reactjs react-jsx