React native 当选项卡视图中的任何项目发生更改时,将本机flatlist重新加载到顶部

React native 当选项卡视图中的任何项目发生更改时,将本机flatlist重新加载到顶部,react-native,react-native-flatlist,react-native-tab-view,React Native,React Native Flatlist,React Native Tab View,我使用react-native社区/react-native选项卡视图呈现两个平面列表,它们基本上是带有复选框的检查列表 扁平列表的代码从以下位置返回: const ListRoute = () => { return ( <FlatList data={data} renderItem={({item, index}) => { return ( <View> <Item ...c

我使用react-native社区/react-native选项卡视图呈现两个平面列表,它们基本上是带有复选框的检查列表

扁平列表的代码从以下位置返回:

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)}
 />
);
};
该复选框从主函数类中获取updateItem函数,并将其ID添加到勾选框列表中。当我使用listRoute函数时,单击一个勾选框将导致整个flatlist重新命名,用户将被带到列表的顶部。如果我不使用一个函数,只是将平面列表本身放进去,那么这种情况就不会发生

编辑:
经过进一步调查,如果我完全删除选项卡视图部分,我仍然会遇到同样的问题。如果我只是将flatlist放入,则列表不会重新加载到顶部,但如果我将组件放入,则会重新加载到顶部。

您应该使用useEffect避免重新加载flatlist。 您需要检查不变性,这意味着您希望替换flatlist的数据。
对复选框勾选使用筛选方法

你能为这个增加细节吗?当前,要指定是否勾选复选框,请使用items.includes(x.id)检查已完成项目列表是否包含复选框的id。您是否建议使用items.filter(item=>item==x)指定是否勾选复选框?我应该在这里使用什么呢?我已经浏览了提供的expo,但是不幸的是,如果你将平面列表移动到一个常量,就像我在tab view中需要它一样,你会遇到同样的问题,单击列表底部的一个项目会使你回到顶部。我在这里保留了我的意思:我在这里也有同样的问题:我还发布了一个问题:你找到解决方案了吗。如果是,请让我知道不幸的是,我没有,但是我已经简化了问题,并在这里用更简单的示例重新发布:
<TabView
renderTabBar={ChallengeTabBar}
navigationState={{index, routes}}
renderScene={renderScene}
onIndexChange={setIndex}
initialLayout={initialLayout}
/>
  const renderScene = SceneMap({
    first: ListRoute,
    second: FriendRoute,
  });