2016-07-24 6 views
5

Nach Heimisch in Reagieren der ListView documentation, eine Listview-Datenquelle mit der folgenden Standard-Implementierung von rowHasChanged werden sollte bestimmen, um erklärt, wenn die gegebene Zeile geändert hat:Was ist der Zweck von Reactive Native ListView 'rowHasChanged'?

var ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2}); 

Meine Frage ist: was hinter mit der Idee, zur Verfügung zu stellen eine so offensichtliche und triviale Implementierung der Erkennung, ob sich eine Zeile geändert hat oder nicht? Gibt es Fälle, in denen diese Implementierung nicht zutrifft? Ich hätte mir gedacht, dass ListViewDataSource mindestens eine Standardimplementierung für solch eine triviale Funktion zur Verfügung gestellt hätte, anstatt diesen Code jedes Mal kopieren und einfügen zu müssen, wenn wir eine Datenquelle erstellen.

Antwort

1

Ich kann nicht dafür sprechen, warum kein Standard angegeben wurde, aber der Grund dafür ist, dass Sie eine Listenansicht mit komplexen Objekten haben und effizienter wissen, ob sich eine Zeile geändert hat ... zum Beispiel wenn alle Listenelemente eine ID-Eigenschaft hatte und man wußte, dass, wenn die ID die gleiche ist dann das gesamte Objekt war das gleiche könnte man tun:

var ds = new ListView.DataSource({ rowHasChanged: (r1, r2) => r1.id !== r2.id }); 
+0

ids Vergleich ist überhaupt nicht effizienter als die Objekte zu vergleichen, in der Tat ist es wahrscheinlich weniger effizient (Objektvergleich in Javascript in erster Linie überprüft, ob die Speicheradressen gleich sind). Die Platzhalterimplementierung, die sie bereitstellen, ist wahrscheinlich so effizient wie möglich, daher bin ich mir nicht sicher, ob der Zweck hier die Effizienz ist. – Tarek

+0

Meiner Meinung nach @ rmevans9 Erklärung ist richtig https://github.com/facebook/react-native/issues/4104 –