Возможно, есть лучшее решение, но я использую delay
свойство Animated.timing()
, и оно хорошо работает для меня.
Мой компонент элемента выглядит следующим образом:
export default class CustomItem extends Component {
constructor(props) {
super(props);
this.state = {
scaleValue: new Animated.Value(0)
}
}
componentDidMount() {
Animated.timing(this.state.scaleValue, {
toValue: 1,
duration : 600,
delay: this.props.index * 350
}).start();
}
render() {
return (
<Animated.View style={{ opacity: this.state.scaleValue }}>
{ this.props.children }
</Animated.View>
);
}
}
А вот и плоский список:
...
renderItem(item) {
return (
<CustomItem index={ item.index } >
<Text>{ item.first_name }</Text>
</CustomItem>
);
}
render() {
return (
<FlatList
keyExtractor={this._keyExtractor}
data={data }
renderItem={ this.renderItem.bind(this) }
/>
);
}
Таким образом, каждый отдельный элемент будет задерживать на 350 миллисекунд больше, чем элемент перед ним.
Конечно, вы можете изменить duration
анимации и свойство delay
и найти идеальную анимацию для вас:)
Вы должны быть осторожны с количеством предметов, потому что вы можете ждать слишком много времени, чтобы увидеть последний предмет:)