首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >反应虚拟化-选择加入或退出虚拟化

反应虚拟化-选择加入或退出虚拟化
EN

Stack Overflow用户
提问于 2017-10-21 07:53:03
回答 2查看 975关注 0票数 0

在我正在开发的类似日历的应用程序中,我使用的是最健壮的反应虚拟化组件。

我使用了ScrollSync的三个网格,就像在这个例子中一样,但也使用cellRangeRenderer在网格上呈现“药丸”。

但是,我发现,在速度较慢的计算机上,滚动时呈现的速度可能相当慢(在一个视图中可以有大约40列20行和40多个药丸)。

一些将要使用这个应用程序的人实际上并不需要虚拟化,因为整个数据表没有那么大。因此,我想要做的是继续使用react-virtualized提供的通用框架,但是对于行x的用户,网格将按照正常方式进行虚拟化。

我知道cellRangeRenderer只是接收行和列的开始和结束索引,然后为网格的每个单元返回一个div数组,所以我可以想象只为整个网格发送开始和结束索引,然后整个网格将被返回。我只是不知道怎么才能重写卷轴上的重渲染。

我很想听听你的建议或类似的经历。

EN

回答 2

Stack Overflow用户

发布于 2017-10-21 16:18:57

如果您的行数足够小,不需要虚拟化,我建议不要使用react-virtualized组件。它不必要地增加了复杂性等。:)

您可以创建一个假的Grid组件,它只呈现所有行,然后根据行数在它和真实的行之间有条件地交换,例如:

代码语言:javascript
复制
import {Grid} from 'react-virtualized';
import FakeGrid from './FakeGrid';

// Your render function
const GridComponent = this.props.rowCount > SOME_THRESHOLD
  ? Grid
  : FakeGrid

return <GridComponent {...gridProps} />
票数 1
EN

Stack Overflow用户

发布于 2020-03-09 09:45:50

我有一个组件,它将Table封装在react-virtualized中,并将一个fixedHeight道具(boolean)传递给它,并按如下方式使用它:

代码语言:javascript
复制
import {
  AutoSizer,
  Table as VirtualizedTable
} from 'react-virtualized';

const Table = (props) => {
  const getHeight = (autoSizerHeight) => {
    const { fixedHeight, headerHeight, rowHeight, rowCount } = props;

    // I'm checking for `rowCount` in order to properly render the `noRowsRenderer` component
    return fixedHeight && rowCount
      ? headerHeight + rowHeight * rowCount
      : autoSizerHeight;
  }
  
  return (
    <AutoSizer
      disableHeight={props.fixedHeight && Boolean(rowCount)}>
      {({ height, width }) => (
        <VirtualizedTable
          ...
          width={width}
          height={getHeight(height)}>
          {props.columnDefs.map(
            (columnDef, columnIndex) => (
              <Column ... />
            )
          )}
        </VirtualizedTable>
      )}
    </AutoSizer>
  );
}

注:

我没有选择退出虚拟化,当我不想在表中滚动,或者当数据被分页并且页面不是很大时,我通常使用fixedHeight支持。

希望它有帮助:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46861234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档