Вы можете просто использовать numberOfLines
, то есть <Text>
prop:
Используется для усечения текста с помощью многоточия после вычисления текстового макета, включая перенос строки, так что общееколичество строк не превышает это число.
И, очевидно, адекватный логический обработчик для сохранения в вашем state
того, какой текст показан, а какой урезан.
Давайте посмотримпример, который я только что создал:
state = {
textShown: -1,
};
toggleNumberOfLines = index => {
this.setState({
textShown: this.state.textShown === index ? -1 : index,
});
};
render() {
return (
<View style={styles.container}>
<FlatList
data={[
{ key: 'a', description: longText },
{ key: 'b', description: longText },
{ key: 'c', description: longText },
]}
renderItem={({ item, index }) => (
<View style={styles.flatListCell}>
<Text
numberOfLines={this.state.textShown === index ? undefined : 3}
style={styles.description}>
{longText}
</Text>
<Text
onPress={() => this.toggleNumberOfLines(index)}
style={{ color: 'red' }}>
{this.state.textShown === index ? 'read less...' : 'read more...'}
</Text>
</View>
)}
/>
</View>
);
}
Здесь я использую state
, чтобы сохранить индекс элемента в показанном FlatList
.Если ничего не отображается, то сохраненное значение равно -1.
Вы можете попробовать его поведение в этой закуске, которая (я надеюсь) воспроизводит ваш случай.Дайте мне знать, если это то, что вы ищете.(Привет, Анилкумар, мы уже встретились :))