Я использую response-native-community / react-native-tab-view для рендеринга двух плоских списков, которые в основном представляют собой контрольные списки с флажками в них.
Код для плоского списка возвращается из:
const ListRoute = () => {
return (
<FlatList
data={data}
renderItem={({item, index}) => {
return (
<View>
<Item
...checkbox code
/>
</View>
);
}}
keyExtractor={(item, index) => item.id + '1'}
listKey={(item, index) => item.id + '2'}
removeClippedSubviews={true}
extraData={(updateItem, subscriptionItems)}
/>
);
};
И код представления вкладки
<TabView
renderTabBar={ChallengeTabBar}
navigationState={{index, routes}}
renderScene={renderScene}
onIndexChange={setIndex}
initialLayout={initialLayout}
/>
Со сценой рендеринга как
const renderScene = SceneMap({
first: ListRoute,
second: FriendRoute,
});
Флажок берет функцию updateItem из основного функционального класса и добавляет ее идентификатор в список отмеченных флажков. Когда я использую функцию listRoute, щелчок по флажку приводит к повторной отрисовке всего плоского списка и перемещению пользователя в верхнюю часть списка. Если я не использую функцию и просто помещаю плоский список сам по себе, этого не происходит.
Изменить: после дальнейшего исследования похоже, что если я полностью удалю часть представления вкладок, у меня все равно будет та же проблема. Если я просто вставлю плоский список, то список не будет перенаправлен наверх, но если я вставлю компонент, он будет.