微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将道具传递到反应表中的行

如何解决如何将道具传递到反应表中的行

我一直在关注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/>
    }
    ...
  }
}

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

任何指针将不胜感激。

解决方法

对于遇到此问题的任何人,react-table 库的作者已在此处回答了这个问题 — https://spectrum.chat/react-table/general/v7-row-getrowprops-how-to-pass-custom-props-to-the-row~ff772376-0696-49d6-b259-36ef4e558821

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

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

然后实际使用这个——

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>
  );
}
,

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

为了将样式应用于整个Row。 (例如,如果value ==“ Error”,则将整个行变成红色),我将在您的表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 />}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。