如何在反应中显示表格中的对象数组

2023-12-04

最近在学习react。我将状态设置为对象数组。我想在页面上的表格中显示该数组(每个对象在一行上)。我一直在研究地图,但是我在理解它时遇到了一些困难。我能够在代码中的不同位置很好地使用映射来映射array,但我在通过映射时遇到问题对象数组。此代码发生在我的渲染内的 div 中:

<table>
  {this.state.orderDetails.map((item =>
  <tr key={item}>{item}</tr>
  ))}
</table>

我收到此错误:“未处理的拒绝(错误):对象作为 React 子项无效(找到:带有键 {OrderID、CustomerID、AddressID、Date、ItemID、BookID、UnitPrice、Quantity} 的对象)”。如果您打算渲染子集合,请改用数组。

订单详细信息肯定已正确设置;当我打开反应工具并检查该组件中的状态时,它被列为一个包含两个元素的数组,每个元素都是一个包含多个元素的对象。如何成功地映射这个对象数组并以表格形式显示它(每个对象都在自己的行上)?感谢您提供任何想法!

EDIT在听取了答案和评论的一些建议后,我将地图更改为以下内容:

<table>
  {this.state.orderDetails.map((item =>
  <tr><td key={item.OrderID}>{item.CustomerID}</td></tr>
  ))}
</table>

错误已经消失。但是,当我单击该按钮时,我会看到一个空的小表格单元格。我期望有多个单元格,因为我的数组有两个对象,当然我期望它不为空。另外,我想要显示的不仅仅是 customerID。我想要在表格上呈现的每个对象中有几个元素(例如数量、价格、标题等)。还有其他建议吗?


我们不知道你的对象数组是什么样的,所以我们必须猜测:

所以我猜这个输入:

const initState = [
    { id: 1, name: "bread", quantitiy: 50 },
    { id: 2, name: "milk", quantitiy: 20 },
    { id: 3, name: "water", quantitiy: 10 }
  ];

我得到这个输出:

enter image description here

它是完全灵活的,所以如果我们有输入:

const initState = [
    { id: 1, name: "bread", quantitiy: 50, location: "cupboard" },
    { id: 2, name: "milk", quantitiy: 20, location: "fridge" },
    { id: 3, name: "water", quantitiy: 10, location: "fridge" }
  ];

然后我们得到这个输出:

enter image description here

最重要的是映射映射到状态数组的映射内的对象值:

{state.map((item) => (
        <tr key={item.id}>
          {Object.values(item).map((val) => (
            <td>{val}</td>
          ))}
        </tr>
      ))}

下面和 codePen 上的完整演示:https://codepen.io/Alexander9111/pen/zYvEbML

我使用了一个功能组件,但它与基于类的组件非常相似。

注意:您还可以创建一个行组件,然后通过状态数组在地图内调用该组件。在此行组件内,您将像我一样映射对象键并输出表数据元素。这是组件死亡(即将所有内容分解为彼此嵌套的越来越小的组件)和过于复杂的更少组件之间的平衡。

function MyTable() {
  const initState = [
    { id: 1, name: "bread", quantitiy: 50, location: "cupboard" },
    { id: 2, name: "milk", quantitiy: 20, location: "fridge" },
    { id: 3, name: "water", quantitiy: 10, location: "fridge" }
  ];
  const [state, setState] = React.useState(initState);

  return (
    <table>
      <tr key={"header"}>
        {Object.keys(state[0]).map((key) => (
          <th>{key}</th>
        ))}
      </tr>
      {state.map((item) => (
        <tr key={item.id}>
          {Object.values(item).map((val) => (
            <td>{val}</td>
          ))}
        </tr>
      ))}
    </table>
  );
}

ReactDOM.render(<MyTable />, document.getElementById("target"));
th,
td {
  border: 1px solid black;
  margin: 0px 0px;
  padding: 5px 5px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.13.1/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.13.1/umd/react-dom.production.min.js"></script>
<div id="target"></div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在反应中显示表格中的对象数组 的相关文章

随机推荐

  • 如何通过 iframe 嵌入调整大小的网站? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我需要将一个网站嵌入到另一个网站中 我认为是通过 iframe 我想以以下分辨率嵌入此网站 200 x 150 像素 我怎样才能做到这一点 以防万一有人在这里闲逛 解决方案在http
  • 带引号的公式中的预期语句结束[重复]

    这个问题在这里已经有答案了 Sub FillNames Range D2 D56 SpecialCells xlCellTypeBlanks Formula IF AND C gt 800 C lt 900 YES NO End Sub 我
  • php 是否可以在没有提交按钮的情况下提交复选框表单?

    我是一名 php 新手 我正在尝试为我的电子商务网站项目创建一个价格范围系统 所以我做了一个复选框表单
  • 环回错误:需要授权

    我有一个带有 mongoDB 的环回应用程序 如下所示 当我以管理员身份登录时 我无法在菜肴上使用 post 方法 我收到需要授权的错误 只有当我将菜肴角色更改为允许所有人时 这才成为可能 我怎样才能通过让每个人都拒绝并只允许某些用户执行某
  • 我需要帮助创建实例变量和构造函数[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 抱歉 我知道这个答案很明显 但我想我只是太慢了 谁能给我实例变量和构造函数的明确定义 实
  • 如何使 WPF ListView 项目水平重复,就像水平滚动条一样?

    我有一个 WPF ListView 它垂直重复数据 我不知道如何让它水平重复 就像 Windows 资源管理器中的幻灯片视图一样 我当前的 ListView 定义是
  • Jaspersoft Studio 在更改报告的数据适配器时添加 uuid

    我目前正在从报表4 5 1 to 贾斯珀软件工作室 5 5 我注意到当我更改数据适配器时贾斯帕软件工作室它添加了uuid标记到报告的 XML 我与不同的数据库有不同的连接 但我讨厌必须进入 Notepad 来删除uuid 从 XML 中 当
  • 在android imageview中使用glide显示google驱动器图像

    我的驱动器网址是 https drive google com file d 0B3DFHb2 MdGYa2NMUkVtVkZ1V1k view usp sharing 我想使用 glide 在 android imageview 中显示它
  • iOS 和 Xcode:在 UITableView 中设置委托和数据源时出现不兼容类型错误

    我正在尝试以编程方式制作一个应用程序 其中包含一个 UITableView 它根据应用程序的文档目录中的文件创建项目列表 我已经能够将文件读入数组 filepathsArray 但是当我尝试使用数组填充表格时 编译崩溃并且 Xcode 抛出
  • BitmapFactory.decodeStream 无法从 ftp 解码 png 类型

    我的错误是什么 如何显示来自 FTP 的 png 我是 android 新手 尝试显示来自不同连接 源的图像 然后我已经显示了从可绘制和 HTTP 加载的图像 现在 我尝试从 FTP 显示 当我使用时 我收到消息 解码器 gt 解码返回 f
  • MySQL 理解基本连接

    我正在努力理解基本的 MySQL 连接 基本上我有 2 个表 其中一个包含客户的名字和地址 ID 另一个包含实际地址 我希望它不只是显示客户名称和地址 ID 而是显示客户名称和实际地址 我的基本选择语句是这样的 SELECT firstNa
  • 使用 Retrofit 获得通用 URL 的任何方法

    我有几个接受相同 GET 参数的 URL 主要用于分页目的 如下所示 public interface AsynchronousApi GET api users public void listUsers Query limit Inte
  • 从jquery处理android中的后退按钮

    我们用 jQuery 开发了一个与 android 集成的应用程序 只有一个 Activity 从这个活动中 我们加载一个 HTML 文件 在这个文件上我们显示和隐藏 div 内容 查看此处提供的网页并按 android 中提供的后退按钮时
  • 在 FullCalendar 中显示周数

    我正在寻找一种在议程周视图上显示周数的方法 我试过了这个方法但没有结果 实际上 我需要像这样将数字放在日历标题中 titleFormat month Calendar br MMMM yyyy week Calendar br Week W
  • log_softmax() 如何实现以更快的速度和数值稳定性计算其值(和梯度)?

    MXNet 和 PyTorch 都提供了计算 log 的特殊实现 softmax 速度更快 数值更稳定 但是 我在这两个包中都找不到该函数 log softmax 的实际 Python 实现 谁能解释一下这是如何实现的 或者更好的是 给我指
  • 快速行插入 UITableView 会导致 NSInternalInconsistencyException

    我有一个 UITableView 有时会快速插入新行 新行的插入由通知观察者处理 该通知观察者监听每当基础数据发生更改时触发的更新通知 我在所有数据模型更改和实际通知发布本身周围使用 synchronized 块 希望每个增量数据更改 和行
  • 遍历已填充的行

    因此 我尝试使用 VBA 迭代 Excel 电子表格中的工作表 我想遍历每一行 然后遍历每一列 尽管进行了谷歌搜索 但我实际上无法找到一种直观的方法来做到这一点 我假设必须填充一行的第一个单元格 如果没有 那么那一定是结束 我可以强制执行这
  • 为什么我们必须在 C# 中同时定义 == 和 !=?

    C 编译器要求每当自定义类型定义运算符时 它还必须定义 see here Why 我很好奇为什么设计者认为有必要 以及为什么编译器不能在只有另一个运算符存在时默认为其中一个运算符提供合理的实现 例如 Lua 允许您仅定义相等运算符 而您可以
  • Javascript 正则表达式和边界

    一位同事问我一个正则表达式问题 我似乎无法找到并回答他 我们使用边界在文本编辑器中突出显示特定长度的文本 但这里有一些示例代码显示了该问题 问题是 第一个文字 str replace 有效
  • 如何在反应中显示表格中的对象数组

    最近在学习react 我将状态设置为对象数组 我想在页面上的表格中显示该数组 每个对象在一行上 我一直在研究地图 但是我在理解它时遇到了一些困难 我能够在代码中的不同位置很好地使用映射来映射array 但我在通过映射时遇到问题对象数组 此代