next.js 在React中使用循环将对象的属性渲染为JSX元素

ev7lccsx  于 2023-06-22  发布在  React
关注(0)|答案(3)|浏览(141)

我有一个名为tour的对象,其结构如下:

const tour = {
  date: dateBetweenFormat(13),//returns string
  where: "NY",
  info: "group full",
  amount: "750$",
  place: "hotel",
};

我想在React中将这个对象的属性呈现为JSX元素,避免重复代码。所需的输出是在元素中显示每个属性,属性名作为标签,属性值显示在标签旁边。
我尝试使用for... in循环和Object.entries()来迭代对象的属性,但我遇到了一个错误,指出“对象作为React子对象无效”。
下面是我尝试的代码:

<div className="mb-2">
  {(() => {
    const elements = [];
    for (let key in tour) {
      elements.push(
        <div
          key={key}
          className="flex bg-blue-200 px-4 mt-1 h-9 font-bold items-center text-blue-500 text-opacity-60"
        >
          {key}: {tour[key]}
        </div>
      );
    }
    return elements;
  })()}
</div>

并且:

<div className="mb-2">
          {Object.entries(tour).map(([key, value]) => (
            <div
              key={key}
              className="flex bg-blue-200 px-4 mt-1 h-9 font-bold items-center text-blue-500 text-opacity-60"
            >
              {value}
            </div>
          ))}
        </div>

预期:

<div className="mb-2">
          <div className="flex bg-blue-200  px-4 mt-1 h-9 font-bold items-center text-blue-500 text-opacity-60">
            {tour.date}
          </div>
          <div className="flex bg-blue-200  px-4 mt-1 h-9 font-bold items-center text-blue-500 text-opacity-60">
            {tour.info}
          </div>
          <div className="flex bg-blue-200  px-4 mt-1 h-9 font-bold items-center text-blue-500 text-opacity-60">
            {tour.amount}
          </div>
          <div className="flex bg-blue-200  px-4 mt-1 h-9 font-bold items-center text-blue-500 text-opacity-60">
            {tour.place}
          </div>
        </div>

有人能指导我如何在React中使用循环正确渲染这个对象的属性吗?有没有更好的方法可以做到这一点?
提前感谢您的帮助!

csbfibhn

csbfibhn1#

你有没有尝试过这样的东西:

<div className="mb-2">
  {Object.keys(tour).map((key) => {
    return (
       <div
        key={key}
        className="flex bg-blue-200 px-4 mt-1 h-9 font-bold items-center text-blue-500 text-opacity-60"
      >
        {key}: {tour[key]}
      </div>
    )
  })}
</div>
jslywgbw

jslywgbw2#

试试这样:

<div className="mb-2">
  {Object.keys(tour).map((key) => (
    <div key={key} className="flex bg-blue-200 px-4 mt-1 h-9 font-bold items-center text-blue-500 text-opacity-60">
      {key}: {tour[key]}
    </div>
  ))}
</div>
fkaflof6

fkaflof63#

有了你提供的代码,我可以让它在这里的代码沙箱中工作https://codesandbox.io/s/react-repl-forked-nc4hj5?file=/src/index.js
我尝试了这两种方法,并从对象中删除了日期,因为我没有提供该函数。我想你的日期格式功能有问题。它不可能返回字符串,它抛出了那个错误。
在返回日期对象之前,请确保对日期对象使用.toString()
你能提供日期格式功能吗?

相关问题