#javascript #reactjs #react-native
Вопрос:
по какой-то причине snapToInterval
он не щелкает должным образом
код:
const ITEM_HEIGHT=60
<FlatList
data={Array(150)
.fill('')
.map((_, index) => ({ key: index, title: index.toString() }))}
renderItem={({ item }) => (
<View style={{ height: ITEM_HEIGHT, alignItems: 'center', justifyContent: 'center' }}>
<Text >{item.title}</Text>
</View>
)}
getItemLayout={(data, index) => ({ length: ITEM_HEIGHT, offset: ITEM_HEIGHT * index, index })}
initialScrollIndex={21}
initialNumToRender={10}
/>
как мне это исправить?
Ответ №1:
вы должны установить
snapToInterval
опора на высоту вашего предмета «60». вам не нужен getItemLayout, если вы не хотите использовать методы snaptoindex или scrollToItem flatlist. кроме того, я думаю, что вы забыли установить значение ITEM_HEIGHT в своей опоре getItemLayout.
Комментарии:
1. извините, я забыл добавить это к вопросу, но теперь я это исправил
Ответ №2:
Я решил проблему отсюда
просто добавьте snapToOffsets
вот так:
const ITEM_HEIGHT=60
<FlatList
data={Data}
renderItem={({ item }) => (
<View
style={{
height: ITEM_HEIGHT,
alignItems: 'center',
justifyContent: 'center',
}}>
<Text style={{ fontWeight: 'bold',color:'white' }}>{item.title}</Text>
</View>
)}
keyExtractor={(_, index) => index.toString()}
getItemLayout={(_, index) => {
return { length: ITEM_HEIGHT, offset: ITEM_HEIGHT* index, index };
}}
initialScrollIndex={21}
showsVerticalScrollIndicator={false}
initialNumToRender={3}
windowSize={9}
snapToOffsets={Data.map((x, i) => (i*ITEM_HEIGHT))}
/>