Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 反应台的无限载荷+;反应虚拟化/反应窗口_Reactjs_React Virtualized_React Table V7_React Infinite Scroll - Fatal编程技术网

Reactjs 反应台的无限载荷+;反应虚拟化/反应窗口

Reactjs 反应台的无限载荷+;反应虚拟化/反应窗口,reactjs,react-virtualized,react-table-v7,react-infinite-scroll,Reactjs,React Virtualized,React Table V7,React Infinite Scroll,我对我的表格有以下要求: 表应该有固定的标题 它需要自动调整大小:为了使无限滚动工作,第一次获取应该获得足够的数据量,以便滚动显示 表体应作为无限加载程序工作:当滚动到列表末尾时,表体应显示加载指示器并加载更多行 我的假设如下所示: 由于用户将滚动浏览可能较大的数据集,我应该虚拟化列表(react虚拟化似乎是我唯一的好选择) 因为我们目前有react表,所以我想保留它(它具有声明表行、列、访问数据和过滤+排序的强大机制) 当我们使用材质ui时,我需要使用材质ui组件 因为react虚拟化有自己的

我对我的表格有以下要求

  • 表应该有固定的标题
  • 它需要自动调整大小:为了使无限滚动工作,第一次获取应该获得足够的数据量,以便滚动显示
  • 表体应作为无限加载程序工作:当滚动到列表末尾时,表体应显示加载指示器并加载更多行
  • 我的假设如下所示:

  • 由于用户将滚动浏览可能较大的数据集,我应该虚拟化列表(react虚拟化似乎是我唯一的好选择)
  • 因为我们目前有react表,所以我想保留它(它具有声明表行、列、访问数据和过滤+排序的强大机制)
  • 当我们使用材质ui时,我需要使用材质ui组件
  • 因为react虚拟化有自己的表组件,所以我可以使用它,但react表有不同的方式呈现行和列,所以我必须使用列表组件。(react表分隔行和列,而react虚拟化将列直接用作表组件的子级)
  • 我看到react虚拟化与名为InfiniteLoader的HOC组件一起工作,所以我也应该使用它
  • 最后,我需要我的列不被弄乱,因为它有更多的文本(即有动态高度)。所以我试着用CellMeasurer来做这个
  • 在这个沙箱中可以看到我所取得的成就 (我不能在这里提供代码,因为它相当大)

    所以,一般来说,我可以使Autosizer、CellMeasurer和react的列表组件虚拟化以工作。 我被困在有限的滚动部分。我在官方文档上看到了这个例子,但它似乎有点反模式(直接改变状态根本不是一件好事)

    所以我尝试获得类似的结果,但是如果您可以看到,出于某种原因,我的loadMore函数启动得太早了。它导致几乎每个滚动事件都会发送请求

    非常感谢您的帮助

    我已经试过了:

  • 使用react窗口而不是react虚拟化 它只适用于简单的用例,并且在单元的动态大小方面失败
  • 使用react inifnite Scroll组件() 它适用于整个页面(无法创建“粘性”标题,无法将加载指示器作为表体的一部分呈现,它没有对长列表进行任何优化)
  • 使用react虚拟化的表组件。 我无法使它与react table一起工作(react virtualized的table组件似乎将单元格直接呈现为table组件的子级。我知道它具有renderRow功能,但这意味着react table具有两个独立的位置
  • 
    {row.cells.map((cell)=>{
    返回(
    {cell.render(“cell”)}
    );
    })}
    
    此外,还不清楚如何以这种方式渲染自定义过滤器

    <TableRow
      {...row.getRowProps({
         style
      })}
      component="div"
      >
      {row.cells.map((cell) => {
         return (
           <TableCell {...cell.getCellProps()} component="div">
             {cell.render("Cell")}
           </TableCell>
          );
       })}
    </TableRow>