反応ネイティブ0.61にアップグレードした後、次のような警告がたくさん表示されます。
VirtualizedLists should never be nested inside plain ScrollViews with the same orientation - use another VirtualizedList-backed container instead.
他のVirtualizedList-backed container
それを使用する必要があります。なぜ今はそのように使用しないように勧められているのですか?
私の意見では、FlatListの代わりにマップを使用できます。しかし、私の場合、大きなリストを表示したくありません。 FlatListを使用しないと、パフォーマンスの問題が発生する可能性があります。だから私はこれを使って警告を抑制しました https://github.com/GeekyAnts/NativeBase/issues/2947#issuecomment-549210509
ScrollView
とFlatList
は同じロジックを共有するため、警告が表示されます。FlatList
がScrollView
内で実行されると、重複します
ちなみにSafeAreaView
は機能しませんが、解決する唯一の方法は
<ScrollView>
{data.map((item, index) => {
...your code
}}
</ScrollView>
エラーが消える
ListHeaderComponent
やListFooterComponent
など、これを解決する方法をいくつか試しましたが、すべてが私には適していませんでした。
達成したかったレイアウトはこのようなもので、一度にスクロールしたかったのです。
<ScrollView>
<View>I'm the first view</View>
<View>I'm the second view</View>
<MyFlatList />
</ScrollView>
まず this の問題とコメントに感謝します。たくさんのアイデアを与えてくれました。
Flatlistの上のListHeaderComponent
の場所を考えていましたが、Flatlist
の方向が列だったので、配置したいヘッダーはFlatlist
の左側にありました:(
次に、VirtualizedList-backed
を試してみました。すべてのコンポーネントをVirtualizedList
にパックしようとしたところ、renderItems
はインデックスを提供し、条件付きでコンポーネントをrenderItems
に渡すことができました。
Flatlist
でこれを処理できたかもしれませんが、まだ試していません。
最終的には次のようになります。
<View>
<Virtualizedlist
data={[]}
initialNumToRender={1}
renderItem={(props)=>{
props.index===0 ? (1st view here) : props.index===1 ? (2nd view here) : (my flatlist)
}}
keyExtractor={item => item.key}
getItemCount={2}
getItem={ (data, index) => {
return {
id: Math.random().toString(12).substring(0),
}
}}
/>
</View>
(inside which lazyly renders↓)
<View>I'm the first view</View>
<View>I'm the second view</View>
<MyFlatList />
もちろん画面全体をスクロールすることもできます。