【发布时间】:2020-08-16 18:02:01
【问题描述】:
我最近一直在学习 React。我将状态设置为一组对象。我想在页面上的表格中显示该数组(每个对象在一行)。我一直在研究地图,但是我在理解它时遇到了一些麻烦。我能够在代码中的不同位置很好地使用 map 来映射 array,但是我在映射 对象数组 时遇到了问题。此代码发生在我的渲染中的 div 中:
<table>
{this.state.orderDetails.map((item =>
<tr key={item}>{item}</tr>
))}
</table>
我收到此错误:“未处理的拒绝(错误):对象作为 React 子项无效(发现:对象带有键 {OrderID、CustomerID、AddressID、Date、ItemID、BookID、UnitPrice、Quantity})。如果您打算渲染一组子项,请改用数组。'
订单详情肯定设置正确;当我打开我的反应工具并检查这个组件的状态时,它被列为一个包含两个元素的数组,每个元素都是一个包含多个元素的对象。如何成功映射此对象数组并以表格形式显示(每个对象在其自己的行上)?感谢您的任何想法!!!
编辑 在从答案和 cmets 中获得一些建议后,我将地图更改为以下内容:
<table>
{this.state.orderDetails.map((item =>
<tr><td key={item.OrderID}>{item.CustomerID}</td></tr>
))}
</table>
错误已消失。但是,当我单击按钮时,我得到一个空的小表格单元格。我希望有多个单元格,因为我的数组有两个对象,当然我希望它不是空的。另外,我想显示的不仅仅是 customerID。我想在表格上呈现的每个对象中都有几个元素(例如数量、价格、标题等)。有什么进一步的建议吗?
【问题讨论】:
-
你的对象结构是什么?尝试输出名称或其他显示属性
<tr key={item.id}>{item.name}</tr> -
映射对象数组时,每个对象都传递给
item。要访问对象的内容,您可以使用item.property,其中property 是您要访问的属性。在您的情况下,我认为它类似于<tr key={item.OrderID}>{item.Quantity}</tr> -
尝试做:
<tr key={item.id}><OrderRow order={item} /></tr>并创建一个订单组件:function Order({order})=><><td>{order.name}...other columns</> -
看看我的答案,它应该可以解决问题 - stackoverflow.com/a/61557412/9792594 - 如果你能提供你的状态(对象数组)会很棒,我不得不猜测。
标签: javascript arrays reactjs mapping setstate