私は、次のrowHasChanged
で、(のWhatsApp/Facebookのメッセンジャーと同様に)チャットセッションのリストが表示されListView
を持っている:ListViewソートの処理方法
rowHasChanged: (r1, r2) => r1.id !== r2.id
私も、更新されていないアイテムが再レンダリングなっていることに気づきました私がshouldComponentUpdate
を使用している場合。
データソースを複製する前にアイテムを別々に並べ替えるので(新しいメッセージがアイテムをリストの先頭に移動させる)、いくつかのトレースの後に私が見つけたのはrowHasChanged
です。それがそれをするのは理にかなっています。
しかし、パフォーマンス上のソートをサポートするソリューションはありませんか? WPFでは、同じ問題(フィルタリングなどもサポートされているため)のために、something to sort byを受け取ったCollectionViewSource
がありました。
誰でもこれらの冗長なレンダリングを削除する方法を知っていますか?
'ListViewDataSource'は不変なデータを使用しているので、' ListView'を使ってそれを使うことはできません。しかし、 'removeClippedSubviews'を有効にしておけば、非常に多くの行をレンダリングするようには見えません。あなたはそれを試しましたか? –
@ GarrettMcCullough問題は、不変のデータや描画が多すぎることではありません。 1つの行がその位置を変更すると、他のすべての行がデータ内の位置を変更するため、リストビューは異なる行を互いに比較しているため、すべての行が変更された行とみなされます。 –
Moti、私のコメントは、あなたが不変のデータオブジェクトを使用しているため、新しいレコードをキューの先頭にプッシュすると*データ構造が変更されているため、すべての行を再レンダリングする必要があるデータ構造が異なるようになりました。しかし、 'removeClippedSubviews'がオンになっている場合は、表示行を再描画するだけなので、すべての行を再描画しても問題ありません。パフォーマンス上の問題は発生しません。リストビューの代替案の一部を見るかもしれません。 –