React Table 使用钩子展开和折叠行

React Table using hooks expand and collapse rows

我在我的项目中使用了 react-table 组件。行扩展 属性 是我使用的功能,现在工作正常。

我需要能够在展开行时折叠所有行。即一次只能打开一排。我确实浏览了许多文档和 Whosebug 链接,但 none 没有解决。请注意,此实现使用了挂钩。就像这里提到的那个:https://codesandbox.io/s/github/tannerlinsley/react-table/tree/master/examples/expanding

默认情况下,它们允许一次打开多行,但我需要执行相反的操作。

我最接近的是:

但这里是在初始加载时打开的。

谢谢

我这里只添加了一部分App功能。代码沙盒:https://codesandbox.io/s/jolly-payne-dxs1d?fontsize=14&hidenavigation=1&theme=dark

注:不习惯react-table库。此代码是仅适用于具有两层行的 table 的示例。您可以使用递归或其他方式优化代码,使代码在多级 tables 中工作。

Cell: ({ row, rows, toggleRowExpanded }) =>
          // Use the row.canExpand and row.getToggleRowExpandedProps prop getter
          // to build the toggle for expanding a row
          row.canExpand ? (
            <span
              {...row.getToggleRowExpandedProps({
                style: {
                  // We can even use the row.depth property
                  // and paddingLeft to indicate the depth
                  // of the row
                  paddingLeft: `${row.depth * 2}rem`
                },
                onClick: () => {
                  const expandedRow = rows.find(row => row.isExpanded);

                  if (expandedRow) {
                    const isSubItemOfRow = Boolean(
                      expandedRow && row.id.split(".")[0] === expandedRow.id
                    );

                    if (isSubItemOfRow) {
                      const expandedSubItem = expandedRow.subRows.find(
                        subRow => subRow.isExpanded
                      );

                      if (expandedSubItem) {
                        const isClickedOnExpandedSubItem =
                          expandedSubItem.id === row.id;
                        if (!isClickedOnExpandedSubItem) {
                          toggleRowExpanded(expandedSubItem.id, false);
                        }
                      }
                    } else {
                      toggleRowExpanded(expandedRow.id, false);
                    }
                  }
                  row.toggleRowExpanded();
                }
              })}
            >
              {row.isExpanded ? "" : ""}
            </span>
          ) : null