6

我一直在关注https://blog.logrocket.com/complete-guide-building-smart-data-table-react/。要根据单元格值应用自定义样式,我正在更新列对象,如下所示:

return {
  Header: key,
  accessor: key,
  width: "150",
  sortType: "basic",
  Cell: ({cell: {value} }) => {
    if (value == "Error") {
      return <RedCell/>
    }
    ...
  }
}

是否可以将自定义样式应用于包含单元格的行?我想一个道具必须被传递到行,但我根本不清楚如何做到这一点。

任何指针将不胜感激。

4

2 回答 2

6

对于任何偶然发现这个问题的人,react-table这里的库的作者已经回答了这个问题 - https://spectrum.chat/react-table/general/v7-row-getrowprops-how-to-pass-custom-props-to -行~ff772376-0696-49d6-b259-36ef4e558821

在您的 Table 组件中,您可以为行传递rowProps您选择的任何道具(例如 )——</p>

<Table
        columns={columns}
        data={data}
        rowProps={row => ({
          onClick: () => alert(JSON.stringify(row.values)),
          style: {
            cursor: "pointer"
          }
        })}
      />

然后实际使用它——</p>

function Table({ columns, data, rowProps = () => ({}) }) {
  // Use the state and functions returned from useTable to build your UI
  const { getTableProps, headerGroups, rows, prepareRow } = useTable({
    columns,
    data
  });

  // Render the UI for your table
  return (
    <table {...getTableProps()}>
      <thead>
        {headerGroups.map(headerGroup => (
          <tr {...headerGroup.getHeaderGroupProps()}>
            {headerGroup.headers.map(column => (
              <th {...column.getHeaderProps()}>{column.render("Header")}</th>
            ))}
          </tr>
        ))}
      </thead>
      <tbody>
        {rows.map(
          (row, i) =>
            prepareRow(row) || (
              <tr {...row.getRowProps(rowProps(row))}>
                {row.cells.map(cell => {
                  return (
                    <td {...cell.getCellProps()}>{cell.render("Cell")}</td>
                  );
                })}
              </tr>
            )
        )}
      </tbody>
    </table>
  );
}
于 2020-12-30T12:34:22.623 回答
0

目前,您正在将样式应用于列定义。

为了将样式应用于整个行。(例如,如果 value == "Error",则将整行设为红色),我会在您的表格 UI 中执行此操作。

在您的 UI 中,您将调用prepareRow(row)然后使用该行来呈现单元格。

也许与:row.cells.map

此时,您可以根据单元格的内容做一些不同的事情row.cells[0]

也许是这样的:

                  {(row.cells[0].value !== "Error" && row.cells.map(cell =>
                    {
                        return (
                            <TableCell {...cell.getCellProps({ className: cell.column.className })}>
                                {cell.render('Cell')}
                            </TableCell>
                        );
                    })) ||  <RedRow />}
于 2020-09-04T19:00:25.230 回答