【问题标题】:How to initially auto-expand all rows with react-table 7?如何最初使用 react-table 7 自动扩展所有行?
【发布时间】:2021-06-07 17:36:50
【问题描述】:

我正在寻找一种简单而干净的方法,以便在使用 react-table v7 时自动扩展所有行。

当我将所有数据映射到true 并将其设置为初始状态时,它不会扩展我的行。

const expanded = {
  1: true,
  2: true,
  ...
};

...

useTable(
  {
    ...
    initialState: {
      expanded
    }
  }
);

通过转储表状态 expanded 属性,我发现生成了非数字键,如 {Col1:somevalue2: true}(分组列)。在创建表实例之前我无权访问这些键,因此我也无权访问行 ID 以生成初始状态。

我发现的唯一方法如下,但我更希望最初扩展 tableInstance(作为useTable() 钩子的结果)。

React.useEffect(() => tableInstance.toggleAllRowsExpanded(true), []);

Github FR 相关讨论:https://github.com/tannerlinsley/react-table/discussions/3317

【问题讨论】:

    标签: reactjs typescript react-table react-table-v7


    【解决方案1】:

    根据文档的内容,您所写的内容具有直观意义,但缺少关键元素。您必须告诉 initialState 您的“扩展”对象与“扩展”属性相关联,如下所示:

      const initialExpanded = React.useMemo(() => {
        return {
          "expanded": {
            "0": true,
            "4": true
          }
      }}, [])
      const { /* ... */ } = useTable({
        initialState: { initialExpanded }, 
        /* etc */
      });
    

    【讨论】:

    • 我看不出它与我的示例有何不同,以及它如何扩展分组行?
    • @simPod 您的对象缺少“扩展”部分。 { "1": true }{ "expanded": { "1": true } } 基本上。至于分组的行,您必须明确包含它们——因此,您需要“1”以及“1.1”和“1.2”等
    • 扩展部分就在那儿:initialState: { expanded }。关键是我真的不知道分组行的 ID,也不想创建一个算法来找到它们。我希望 react-table 已经有一个并为我做。
    • 我很抱歉,显然我完全错过了您的回答?无论如何,如果您不能根据您的数据预先生成 ID,那么我不知道 react-table 公开的任何方法或对象允许您预先设置所有要切换的行。我认为您已经在使用最佳解决方案:钩子。这是一个相当优雅的解决方案,除非存在渲染时间延迟或其他问题,我猜。
    • 是的。不幸的是,这是一种肮脏的解决方法。表格闪烁,并且在重新渲染计数方面不是最佳的。正如你所说,到目前为止似乎还没有合适的方法。还是谢谢。
    猜你喜欢
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    • 2020-04-24
    • 2020-05-30
    • 2021-09-12
    • 2012-09-17
    相关资源
    最近更新 更多