Можно ли предотвратить первую отрисовку и перейти к componentDidMount?

У меня есть список со списком записей. при нажатии каждой записи пользователь будет перенаправлен на страницу с подробными сведениями. когда пользователь возвращается на страницу списка, страница списка должна сохранять свою позицию прокрутки (т.е. пользователь должен перейти к той же записи, на которой он нажал). МойFlatList как показано ниже,

   <FlatList
       ref={ref => this.flatListRef = ref}
       data={equipmentsList}
       renderItem={({ item, index }) => this.renderEquipments(item, index)}
       keyExtractor={item => item.id.toString()}
       onScroll={(e) => this.handleScroll(e)}
    />

каждый раз, когда пользователь прокручивает страницу, положение прокрутки сохраняется с помощью onScroll способ использовать его позже

    onScroll={(e) => this.handleScroll(e)}

вот handleScroll метод

     handleScroll(event) {
        this.setState({ scrollPosition: event.nativeEvent.contentOffset.y });
     }

А вот код для прокрутки FlatList в желаемую позицию, когда пользователь возвращается со страницы сведений на страницу списка

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

Я делаю это в componentDidMount так как, this.flatListRef доступен до тех пор, пока компонент не отобразится хотя бы один раз.

здесь проблема, когда происходит первый рендер FlatList отображается без какой-либо позиции прокрутки, а затем при вызове componentDidMout FlatList рендеринг с позицией прокрутки (прокрутка к желаемому элементу списка). это поведение, по-видимому, заметно пользователю, что рендеринг происходит дважды.

Здесь мои сомнения, 1. можно ли предотвратить первый рендер так, чтобы componentDidMount только сделает FlatList?

или

2.Есть ли альтернатива, чтобы поместить пользователя в ту же позицию прокрутки, когда он возвращается со страницы сведений на страницу списка?

Спасибо.

0 ответов

Другие вопросы по тегам