Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React native 什么';这是React Native ListView的目的';s';行已更改';?_React Native - Fatal编程技术网

React native 什么';这是React Native ListView的目的';s';行已更改';?

React native 什么';这是React Native ListView的目的';s';行已更改';?,react-native,React Native,根据React Native,ListView数据源应使用以下rowHasChanged的标准实现进行声明,以确定给定行的更改时间: var ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2}); 我的问题是:必须提供这样一个显而易见的、琐碎的实现来检测行是否已更改,其背后的想法是什么?是否存在这种实现不正确的情况?我本以为它至少为这样一个简单的函数提供了一个默认实现,而不是每次创建数据源时都要复制和粘贴

根据React Native,ListView数据源应使用以下rowHasChanged的标准实现进行声明,以确定给定行的更改时间:

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的解释是正确的