在React中使用不同的HTML标记渲染表单元格(td)

时间:2019-06-06 16:12:58

标签: html reactjs jsx code-reuse

我正在开发一个React应用程序,该应用程序从API提取数据并将其呈现到表中。我有3个组成部分:RowBodyTableTable获取数据,将其传递到BodyBody将其传递到Row,然后呈现单元格。

我面临的问题是Row中的数据既是文本又是图像。这是我的Row组件的外观:

const Row = props => {
  return(
    props.data.map(row =>
      <tr key={row.id}>
          {props.cols.map(col =>
             <td>{row[col.name]}</td>
          )}
      </tr>
   )
  );
}

从API提取的数据采用以下格式:

data = [
  {
    "firstName": "Jack",
    "lastName": "Sparrow",
    "id": "jckspr"
  }
]

但是,我还需要通过<img src="images/logo.png">在第四列中呈现静态小图像。但是我无法使用已经实现的当前代码逻辑来渲染该图像,即无法在Body中渲染该图像:
<Row data={data} cols={tableHeaders}>,其中tableHeaders

[
  { header: "First Name", name: "firstName" },
  { header: "Last Name", name: "lastName" },
  { header: "id", name: "id" },
  { header: "Image", name: "image" }
]

如何在保持可重用和可扩展的代码体系结构的同时实现所需的功能?

1 个答案:

答案 0 :(得分:0)

为单元格创建一个新组件

const Cell = ({ colName, value }) => {
  if (colName === 'image') {
    return <img src="images/logo.png" />;
  }
  // Other if's for other possible cell types
  // ...
  // Otherwise return the value
  return value;
}

然后更新组件:

const Row = props => {
  return(
    props.data.map(row =>
      <tr key={row.id}>
          {props.cols.map(col =>
             <td>
               <Cell colName={col.name} value={row[col.name]} />
             </td>
          )}
      </tr>
   )
  );
}