FlatListのデータ更新時に再描画されない
概要
ちょっと困ってしまって、検索が時間かかったので他の人の手助けになればと思いメモします。
問題
React NavigationとFlatListでリスト編集サンプルアプリを作成した時に、FlatList
のデータ更新時に再描画されない問題に遭遇しました。
- データを
FlatList
で表示する画面がある - 他の画面でデータを更新する
FlatList
の画面を開くとデータが描画されていない(更新したものだけでなく、元からあったものの描画されない)- ちょっとスクロールすると再描画される
なんだこれ?と悩んでしまいました。
解決
検索するとextraData
を設定しろとか色々見つかったのですが、このIssueから解決できました。
コメントで言及されているケースと同じ状態だったのでFlatList
にremoveClippedSubviews={false}
を追加してあげると再描画されるようになりました。
感想
removeClippedSubviews
は高速化のためのフラグだそうです。FlatList
がラップしているVirtualizedList
のドキュメントにこのプロパティに関する言及があります。またこのページに「バグを引き起こすかも」、という注意がされているのも確認できます。
上記の方法でもうまくいかないケースがあるそうなのでIssue
を読んでみると何か糸口が見つかるかもしれません。