React native 什么';这是React Native ListView的目的';s';行已更改';?
根据React Native,ListView数据源应使用以下rowHasChanged的标准实现进行声明,以确定给定行的更改时间:React native 什么';这是React Native ListView的目的';s';行已更改';?,react-native,React Native,根据React Native,ListView数据源应使用以下rowHasChanged的标准实现进行声明,以确定给定行的更改时间: var ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2}); 我的问题是:必须提供这样一个显而易见的、琐碎的实现来检测行是否已更改,其背后的想法是什么?是否存在这种实现不正确的情况?我本以为它至少为这样一个简单的函数提供了一个默认实现,而不是每次创建数据源时都要复制和粘贴
var ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
我的问题是:必须提供这样一个显而易见的、琐碎的实现来检测行是否已更改,其背后的想法是什么?是否存在这种实现不正确的情况?我本以为它至少为这样一个简单的函数提供了一个默认实现,而不是每次创建数据源时都要复制和粘贴这些代码。我无法解释为什么没有提供默认值,但它可用的原因是如果您有一个包含复杂对象的列表视图,并且知道更多了解行是否已更改的有效方法。。。例如,如果所有列表项都有一个ID属性,并且您知道如果ID相同,那么整个对象都是相同的,那么您可以执行以下操作:
var ds = new ListView.DataSource({ rowHasChanged: (r1, r2) => r1.id !== r2.id });
rowHasChanged有助于组件在重新呈现整个列表时更加高效。它提供了一种通过不重新呈现整个列表来获得性能的方法。 下面是一个解释:
比较ID的效率并不比比较对象的效率高,事实上它的效率可能更低(Javascript中的对象比较主要检查内存地址是否相同)。他们提供的占位符实现可能是您所能得到的最有效的,因此我不确定这里的目的是否是为了提高效率。在我看来@rmevans9的解释是正确的