2016-07-24 13 views
5

指定された行が変更されたときに、ネイティブのListView documentationを反応させることにより、ListViewのデータソースが決定順序でrowHasChangedの以下の標準実装して宣言する必要があります。ReactネイティブListViewの 'rowHasChanged'の目的は何ですか?

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

ここでの私の質問は次のとおりです。提供することの背後にある考え方は何ですか行が変更されたかどうかを検出するような明白かつ簡単な実装ですか?この実装が真実でない場合はありますか? ListViewDataSourceは、データソースを作成するたびにこのコードをコピーして貼り付けるのではなく、そのような簡単な関数のためのデフォルトの実装を少なくとも提供していると思います。

答えて

1

デフォルトが提供されていなかった理由については言えませんが、複雑なオブジェクトのリストビューがあり、行が変更されたかどうかをより効率的に知る方法がある場合などがあります

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

IDを比較することで、すべてのオブジェクトを比較するよりも効率的ではない、それはおそらくあまり効率的で、実際には(Javascriptを主にチェックにおけるオブジェクト比較メモリアドレスが同じ場合): は、ここでの説明です。それらが提供するプレースホルダーの実装は、おそらくあなたが得ることができるほど効率的です。だから、ここの目的が効率的かどうかはわかりません。 – Tarek

+0

私の意見では、@ rmevans9の説明は正しいですhttps://github.com/facebook/react-native/issues/4104 –

0

rowHasChangedは、コンポーネントが再レンダリングする際に、より効率的であることができます:あなたのリスト項目のすべてが、IDプロパティを持っていた場合は、IDが同じだった場合、オブジェクト全体があなたができると同じであることを知っていました全リスト。これは、リスト全体を再レンダリングしないことでパフォーマンスを向上させる方法を提供します。

https://facebook.github.io/react-native/docs/performance.html

関連する問題