当前位置: 首页 > 面试题库 >

通过反应虚拟化和新的CellMeasurer实现动态行高

丁俊智
2023-03-14
问题内容

我正在使用带有Autosizer,List和CellMeasurer组件的react-viralized
9。列表数据更改后,我需要更新行高。看来,由于在版本9中进行了更改以支持React
Fiber,所以CellMeasurer的唯一公共方法现在是measure()。大多数示例使用以前的resetMeasurementForRow()方法。当前的CellMeasurer文档似乎没有有关新公共方法的任何信息。不知道我是否忽略了某些内容,但可以提供任何帮助。

const cache = new CellMeasurerCache({
  defaultHeight: 60,
  fixedWidth: true
});

<AutoSizer>
  {({ width, height }) => (
    <List
      deferredMeasurementCache={cache}
      height={height}
      ref={element => { this.list = element; }}
      rowCount={list.length}
      rowHeight={cache.rowHeight}
      rowRenderer={this.rowRenderer}
      width={width}
    />
  )}
</AutoSizer>

rowRenderer({ index, key, parent, style }) {
  return (
    <CellMeasurer
      cache={cache}
      columnIndex={0}
      key={key}
      overscanRowCount={10}
      parent={parent}
      ref={element => { this.cellMeasurer = element; }}
      rowIndex={index}
    >
      {({ measure }) => {
        this.measure = measure.bind(this);

        return <MyList index={index} data={list[index]} style={style} />;
      }}
    </CellMeasurer>
  );
}

componentWillReceiveProps(nextProps) {
  // Some change in data occurred, I'll probably use Immutable.js here
  if (this.props.list.length !== nextProps.list.length) {
    this.measure();
    this.list.recomputeRowHeights();
  }
}

问题答案:

列表数据更改后,我需要更新行高。当前的CellMeasurer文档似乎没有有关新公共方法的任何信息。

诚然,有关新文档,文档可以进行改进CellMeasurer。但是,在这种情况下,您需要做两件事来响应行数据/大小的更改:

  1. 如果特定列表项的大小已更改,则需要清除其缓存大小,以便可以重新测量它。您可以通过调用clear(index)来做到这一点CellMeasurerCache。(传递已index更改的行的。)
  2. 接下来,您需要List告知其大小信息需要重新计算。您可以通过致电进行操作recomputeRowHeights(index)。(传递已index更改的行的。)

有关类似于您所描述内容的示例,请查看我使用react-
virtualized构建的类似Twitter的示例应用程序。您可以在此处查看源代码



 类似资料:
  • 我是新的Android-NDK AR所以需要一些帮助,我正在使用Virtaul按钮样本(从Vuforia)。 我可以从虚拟触摸到物理触摸吗

  • 我是新的扩大房地产,所以有问题。我正在使用来自VUFORIA的Android SDK,并试图运行项目“虚拟按钮”示例项目,当我从命令提示符使用“ndk-build”构建它时,它构建成功,但当我运行项目时,我崩溃了,日志猫说“java.lang.noClassDefounderRor:com/Qualcomm/ar/pl/camerapReview”,在运行这个项目时,有没有任何主体遇到同样的问题?

  • 问题内容: 假设我在组件中将状态设置为: 如果在我的代码的其他地方,我有一个包含这些值的键的数组,即,如何循环遍历该数组以找到相应状态值的值? 问题答案: 状态是一个对象 ,因此您可以通过以下方式访问任何值: 使用任何循环等迭代,并通过来访问值,如下所示: 检查以下代码段:

  • 本文向大家介绍完全虚拟化和准虚拟化之间的区别,包括了完全虚拟化和准虚拟化之间的区别的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将了解完全虚拟化和半虚拟化之间的区别 全面虚拟化 此过程由IBM于1966年引入。它被认为是第一个用于服务器虚拟化的软件解决方案。它使用二进制翻译和直接方法。 在这种情况下,使用虚拟机将来宾操作系统与虚拟化层和硬件完全隔离。 完全虚拟化的示例包括Microsof

  • 解决两个我认为的痛点: 痛点一:.申请记录没有沉淀,无法追查。机器出问题不好找到负责人,节点维护时必须要抄送全公司。 平台对应的解决方法:        采用用户自主注册的方式来开通账户,用户自行申请虚拟机,在后台审核。用户可以时时看到订单进度及状态。维护时可以只抄送负责人即可,也可以在页面中挂上公告。 痛点二:虚拟机开通过程重复毫无技术含量,初始化麻烦,大批量开通时导致工作量过大,问题率过高。

  • 虚拟化 [PV_OPS] noreplace-paravirt 禁止使用内核通用的半虚拟化接口paravirt_ops,主要用于解决某些在Virtual PC上安装或运行Linux的故障。 [VMMIO] virtio_mmio.device=size@baseaddr:irq[:id] 实例化virtio-mmio设备(CONFIG_VIRTIO_MMIO)。可以多次使用以实例化多个设备。 si

  • 问题内容: 我想通过ajax向数据库提交数据,将数据插入数据库后,该数据应最后动态显示在 Demo.html 文件中,即在我的情况下位于div之后。 我已经通过ajax很好地存储了数据,但是我不知道如何将这些新插入的数据显示到 Demo.html 。所以请指导我如何实现此目的。 下面是我的代码。 AjaxFile.html controller.php Demo.html 问题答案: AjaxFi

  • 本文向大家介绍虚拟机实现静态IP登录和无线上网,包括了虚拟机实现静态IP登录和无线上网的使用技巧和注意事项,需要的朋友参考一下 环境:笔记本 + 家用WIFI + 公司WIFI + VMware + CentOS6.8 + Xshell 问题描述:初学Linux时,用笔记本装了虚拟机(单网卡),想实现linux在家和公司都能够无线连网,但又不想上网地点变动之后每次手动输入IP登录Xshell。 解