数据未正确显示在 React 组件内的 HTML 表格上

问题描述 投票:0回答:2

我正在开发一个 React 组件,它会根据一些信息发送电子邮件。我为该电子邮件创建了另一个组件,以便我可以传递数据,然后它将以正确的格式显示数据。该格式包括两个表,一个是固定的,另一个是动态的。目前,我传递给动态表的数据将所有内容显示在同一行上。我希望它显示在不同的行上。

这就是数据发送到函数的方式:

{
"partnerPriority": [
    " A",
    " B"
],
"partnerTournament": [
    " Copa libertadores",
    "  Copa "
],
"partnerEvent": [
    " Cali vs America",
    "  Copa libertadores"
],
"partnerDate": [
    " 12/12/12",
    " 11/11/22"
],
"partnerCountries": [
    " CO,BR,EC",
    " CO"
],
"partnerChannels": [
    " ESPN,FOX",
    " FOX"
]

}

这是功能:

 export const EmailHtePartner = (data) => {
  try {

    return `
  <html>
  <head>
    <style>
      * {
        font-family: Helvetica, Arial, sans-serif;
      }
      h1,
      h2,
      h4,
      h3,
      h5 {
        color: white;
      }
      h4 {
        margin: auto;
      }
      th {
        font-weight: 600;
        margin: 6;
        padding: 8;
      }
      td {
        color: white;
        margin: 6;
        padding: 8;
        font-weight: 100;
      }
      table {
        text-align: center;
        border-collapse: collapse;
      }
      table,
      td,
      th {
        border: 0.1rem solid #ffffff;
      }
      .wrapper {
        display: table;
        width: 100%;
        height: 100%;
      }

      .container {
        display: table-cell;
        vertical-align: middle;
        text-align: center;
      }
      .email-content {
        display: inline-block;
        text-align: left;
      }

    </style>
  </head>
  <body>
    <div class="wrapper">
      <div class="container">
        <div class="email-content">
          <div
            style="
              background-color: #050914;
              border-radius: 10px;
              padding: 1.5rem;
              width: 700px;
              height: fit-content;
              margin: 3rem;
            "
          >
  
            <h2 style="font-weight: bold; text-align: center">
             TEXT
            </h2>
            <h3 style="margin: 2; font-weight: bold; text-align: center">
              Events:
            </h3>
            <table>
              <tr>
                <th
                  style="
                    background-color: #fd8204;
                    color: #050914;
                    font-weight: 600;
                  "
                >
                  Category
                </th>
                <th style="background-color: #fd8204; color: #050914">
                  Tournament
                </th>
                <th style="background-color: #fd8204; color: #050914">Event</th>
                <th style="background-color: #fd8204; color: #050914">Date</th>
                <th style="background-color: #fd8204; color: #050914">
                  Countries
                </th>
                <th style="background-color: #fd8204; color: #050914">
                  Channels
                </th>
              </tr>
              ${data.map((item, index) => `
              <tr key=${index}>
                <td>${item.partnerPriority}</td>
                <td>${item.partnerTournament}</td>
                <td>${item.partnerEvent}</td>
                <td>${item.partnerDate}</td>
                <td>${item.partnerCountries}</td>
                <td>${item.partnerChannels}</td>
              </tr>
            `)}
            </table>
              <h3 style="margin: 2; font-weight: bold; text-align: center">
                Notes:
              </h3>
            <table>
              <tr>
                <th style="background-color: #fd8204; color: black">
                  Partners
                </th>
                <th style="background-color: #fd8204; color: #050914">DMCR</th>
                <th style="background-color: #fd8204; color: #050914">
                  Thresholds
                </th>
              </tr>
              <tr>
                <td
                  style="
                    text-align: justify;
                    font-weight: 100;
                    width: 33.3%;
                    padding: 1rem;
                  "
                >
                  TEXT
                </td>
                <td
                  style="
                    text-align: justify;
                    font-weight: 100;
                    width: 33.3%;
                    padding: 1rem;
                  "
                >
                  TEXT
                </td>
                <td
                  style="
                    text-align: justify;
                    font-weight: 100;
                    width: 33.3%;
                    padding: 1rem;
                  "
                >
                  TEXT
                </td>
              </tr>
            </table>
            <div
              style="display: flex; justify-content: left; padding-top: 10px"
            >
              <h5 style="margin: 2; font-weight: 100">
                TEXT
              </h5>
            </div>
          </div>
        </div>
      </div>
    </div>
  </body>
</html>

   `;
  } catch (error) {
    console.log(error);
  }
}

测试时,我看到所有内容都在同一行上,但是我希望数据位于不同的行上,如下所示:

Category,tournament,event,Date,Countries,Channels
A,Copa libertadores, Cali vs America,12/12/12,CO,BR,EC,ESPN  -> first row.
B,Copa, Copa libertadores, 11/11-22,CO,FOX -> second row. 

如果有更多数据,则应添加所需数量的行。

javascript html reactjs
2个回答
1
投票

我假设您将为

data
对象的每个键获得相同长度的值。理想情况下应该是这样,因为如果是表数据,那么
data
对象中每个键的值的长度应该是相同的。

解决方案:

{
  data['partnerPriority'].map((value, index) => <tr key={index}>
     <td>{data['partnerPriority'][index]}</td>
     <td>{data['partnerTournament'][index]}</td>
     <td>{data['partnerEvent'][index]}</td>
     <td>{data['partnerDate'][index]}</td>
     <td>{data['partnerCountries'][index]}</td>
     <td>{data['partnerChannels'][index]}</td>
   </tr>
)}

这是DEMO


0
投票

您需要重新格式化您的对象,以便拥有 2 个大型嵌套对象,因为您有类似 CSV 的扁平数据。例如:

[
{id: 0, partnerPriority: 'A', partnerTournament},
{id: 0, partnerPriority: 'A', partnerTournament}
]

然后填写每个中的所有数据

© www.soinside.com 2019 - 2024. All rights reserved.