Плоский список не прокручивается до нужного смещения при использовании scrollToOffset - PullRequest
0 голосов
/ 24 февраля 2020

вот мой FlatList код

 <FlatList
    ref={ref => this.flatListRef = ref}
    data={this.state.data}
    renderItem={({ item, index }) => this.renderItems(item, index)}
    onScroll={(e) => this.handleScroll(e)}
/>

вот handleScroll метод, где я получаю ScrollPosition

handleScroll(event) {
    this.props.updateAppState('scrollPosition', event.nativeEvent.contentOffset.y);
}

И, наконец, componentDidMount ScrollToOffset называется

componentDidMount() {
    this.flatListRef.scrollToOffset({ animated: false, offset: this.props.app.scrollPosition});
}

FlatList никогда не прокручивает свой список. Я сейчас действительно беспомощен. Кто-нибудь может дать мне знать, что я могу сделать, чтобы scroll достиг желаемого offset? Спасибо.

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

Рад, что вы нашли решение, дело даже в том, что я столкнулся с этой проблемой, чтобы выяснить, что использование setTimeout действительно работает.

Это напомнило мне основы javascript. Происходит событие l oop. Когда ваша страница загружается, она вызывает каждый метод внутри события l oop.

Без setTimeout код фактически выполняется даже до того, как все компоненты будут визуализированы в первый раз, поэтому вы не видите эффекта. Но с setTimeout, даже если время 0 мс, он наконец добавляется в событие oop. И после каждой функции asyn c этот setTimeout снова возвращается и выполняется. Когда ты видишь разницу.

надеюсь, что это поможет не стесняться сомнений

1 голос
/ 24 февраля 2020

После нескольких попыток я нашел решение с помощью этого ответа о переполнении стека , что задержка заставляет его работать.

setTimeout(() => {
  this.flatListRef.scrollToOffset({ offset: this.props.app.scrollPosition, animated: false })
}, 0)

Но я не совсем понял, почему эта задержка требуется. В официальных документах о самой задержке ничего не упоминалось. Хотя проблема уже решена, я хотел бы знать причину этой задержки.

Может ли кто-нибудь помочь мне узнать причину этой задержки ?. Спасибо.

...