Если вы хотите получить конечный элемент, вы можете использовать separators.updateProps
для добавления пользовательского свойства. Ниже я использовал пример из FlatList docs и немного его изменил. В этом примере мы выделяем завершающий разделитель элемента, по которому щелкнули, и добавляем trailingItem
к подпоркам ItemSeparatorComponent
.
Вывод:
Код:
JSX:
<View style={styles.container}>
<FlatList
ItemSeparatorComponent={(props) => {
console.log('props', props); // here you can access the trailingItem with props.trailingItem
return (<View style={{height: 5, backgroundColor: props.highlighted ? 'green' : 'gray'}} />);
}}
data={data}
inverted
renderItem={({item, index, separators}) => renderItem(item,index,separators)}
/>
</View>
renderItem:
const renderItem = (item, index, separators) => {
return (
<TouchableHighlight
key={item.key}
onPress={() => console.log('onPress')}
onShowUnderlay={() => separators.updateProps('trailing', {trailingItem: data[index+1], highlighted: true})}
onHideUnderlay={() => separators.updateProps('trailing', {trailingItem: data[index+1], highlighted: false})}>
<View style={{backgroundColor: 'white', height: 50, justifyContent: 'center', alignItems: 'center'}}>
<Text>{item.id}</Text>
</View>
</TouchableHighlight>
);
}
Объяснение:
Вся магия c происходит здесь:
onShowUnderlay={() => separators.updateProps('trailing', {trailingItem: data[index+1], highlighted: true})}
Из документов видно, что updateProps ожидает следующие два параметра:
выбор (enum ('ведущий', 'трейлинг'))
newProps (объект)
Сначала мы выбираем trailing
, затем мы можем добавить наши обычай реквизит Мы добавляем trailingItem
реквизит и переопределяем highlighted
реквизит. Теперь мы можем получить доступ к нашим реквизитам в ItemSeparatorComponent с помощью props.trailingItem (см. Выше, я оставил комментарий к указанной строке c).
Рабочий пример:
https://snack.expo.io/@tim1717 / flatlist-separators