2016-07-24 97 views
5

根據反應原住民的ListView documentation,一個ListView數據源應,以便確定以下標準執行rowHasChanged的聲明時給定的行發生了變化:React Native ListView的'rowHasChanged'的目的是什麼?

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

這裏我的問題是:什麼是必須提供背後的想法這樣一個顯而易見的檢測行是否已經改變的實現?有沒有這種實現不成立的情況?我會想象,ListViewDataSource至少會爲這樣一個簡單的函數提供一個默認實現,而不是每次創建數據源時都必須複製和粘貼這些代碼。

回答

1

我不能說爲什麼沒有默認提供,但它的可用原因是如果你有一個列表視圖與複雜的對象,並知道一個更有效的方式來知道一個行已經改變...例如如果所有列表項有一個ID屬性,你知道,如果ID是那麼相同的整個對象是一樣的,你可以這樣做:

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 –

相關問題