Ale*_*nko 17 reactjs react-virtualized react-infinite-scroll react-table-v7
我对我的桌子有以下要求:
我的假设如下:
我能够实现的目标可以在这个沙箱中看到 https://codesandbox.io/s/react-table-infinite-mzkkp?file=/src/MuiTable.js (我无法在这里提供代码,因为它很大)
因此,一般来说,我可以使 Autosizer、CellMeasurer 和 List 组件从反应虚拟化中正常工作。我被困在无限滚动部分。我在官方文档上看到了这个例子,但似乎有点反模式(直接突变状态根本不是一件好事)
所以我试图达到类似的结果,但是如果你能看到,我的 loadMore 函数由于某种原因触发得太早了。它导致几乎每个滚动事件都发送请求。
任何帮助深表感谢。
我已经尝试过的:
<TableRow
{...row.getRowProps({
style
})}
component="div"
>
{row.cells.map((cell) => {
return (
<TableCell {...cell.getCellProps()} component="div">
{cell.render("Cell")}
</TableCell>
);
})}
</TableRow>
Run Code Online (Sandbox Code Playgroud)
此外,尚不清楚如何以这种方式呈现自定义过滤器。
我知道这不是您正在寻找的答案,但我建议使用IntersectionObserver
而不是虚拟化库。反应虚拟化对于动态/响应大小的元素来说不是很好。IntersectionObserver
是一个本机浏览器 API,可以检测元素何时进入视口,而无需为其提供元素大小。
您可以轻松地将它与像react-intersection-observer这样的react库一起使用,它有一个InView
组件和一个useInView
钩子,尽管这需要用InView
. IntersectionObserver 的性能往往比基于滚动事件的解决方案(如 React-virtualized)更好,尽管如果您有 1000 个观察者,性能可能会下降。
您还可以使用intersection-observer-admin之类的东西,它将所有观察者集中到一个实例中,类似于反应 SyntheticEvent。您希望将其集成到类似React.useContext
或 redux 之类的东西中。
归档时间: |
|
查看次数: |
6054 次 |
最近记录: |