React Native ListView 回收
Posted
技术标签:
【中文标题】React Native ListView 回收【英文标题】:React Native ListView Recycling 【发布时间】:2015-07-28 03:39:03 【问题描述】:我正在使用 React Native 并试图使用用户可以滚动浏览的 ListView 组件创建一长串卡片(非常类似于 Facebook 当前的应用程序)。我注意到的是,当我创建大量卡片时,应用程序的内存占用量随着滚动浏览它们而继续增长。除非我滚动,否则它不会增长。
我对此的解释是 ListView 仅在视图变得可见之前呈现视图,这正是它应该做的。然而,我没有看到的是,一旦视图从屏幕上滚出不可见,它就会释放视图。是否需要设置一些属性才能启用此功能?如何在 React Native 中管理长列表的内存?
【问题讨论】:
【参考方案1】:ListView 保留它的所有行组件,因为它们可能是有状态的(即具有this.state
),但您可以使用removeClippedSubviews
属性告诉它释放底层原生视图:
这是 RCTView 暴露的一个特殊性能属性,当有很多子视图时滚动内容很有用,其中大部分都在屏幕外。要使此属性生效,必须将其应用于包含许多超出其边界的子视图的视图。子视图还必须具有溢出:隐藏,包含视图(或其父视图之一)也应如此。
https://facebook.github.io/react-native/docs/view.html#removeclippedsubviews。
【讨论】:
我似乎无法让它工作。查看 ListView 的实现,看起来这个 removeClippedSubviews 方法只是 Objective-c 代码中的一个存根。我在这里错过了什么吗?谢谢【参考方案2】:看起来有人已经走在正确的道路上。
https://github.com/facebook/react-native/issues/499#issuecomment-128836161
【讨论】:
以上是关于React Native ListView 回收的主要内容,如果未能解决你的问题,请参考以下文章
react-native-page-listview使用方法