如何解决当缓存中有可用数据时,是否在分页中重新中继现代useLazyLoadQuery分批检索?
我在现代中继中有这样的分页:
const CategoryContent = () => {
const { categoryQuery } = useRoute<CategoryContentScreenRouteProp>().params;
const { viewer } = useLazyLoadQuery<CategoryContentQuery>(
graphql`
query CategoryContentQuery(
$count: Int
$cursor: String
$category: String
) {
viewer {
...InfiniteCategories_viewer
@arguments(count: $count,cursor: $cursor,category: $category)
}
}
`,{ count: 7,category: categoryQuery }
);
//console.log("CategoryContent viewer",viewer);
return (
<Suspense fallback={<LoadingView />}>
<View>
<Text>CategoryContent</Text>
</View>
<InfiniteCategories viewer={viewer} />
</Suspense>
);
};
这是无限分页:
const InfiniteCategories = ({
viewer,}: {
viewer: InfiniteCategories_viewer$key;
}) => {
const { data,loadNext,hasNext,isLoadingNext } = usePaginationFragment<
InfiniteCategoriesPaginationQuery,any
>(
graphql`
fragment InfiniteCategories_viewer on Viewer
@argumentDeFinitions(
count: { type: "Int",defaultValue: 7 }
cursor: { type: "String",defaultValue: null }
category: { type: "String" }
)
@refetchable(queryName: "InfiniteCategoriesPaginationQuery") {
merchants(first: $count,after: $cursor,category: $category)
@connection(key: "InfiniteCategories_viewer_merchants") {
pageInfo {
startCursor
endCursor
}
edges {
node {
id
category
logo
createdAt
isFavorite
pk
name
}
}
}
}
`,viewer
);
console.log("data InfiniteCategories",data);
return (
<StyledFlatList
{...{
data:
data && data.merchants && data.merchants.edges
? data.merchants.edges
: [],contentContainerStyle: styles.contentContainerStyle,showsverticalScrollIndicator: false,keyExtractor: ({ cursor }) => cursor,renderItem: ({ item }) => (
<View>
<Text>{item.node.name}</Text>
</View>
),ListFooterComponent: () => {
if (isLoadingNext) return <ActivityIndicator />;
if (hasNext)
return (
<LoadMoreButton
onPress={() => {
loadNext(7);
}}
/>
);
return null;
},}}
/>
);
};
但是我的问题出在每个渲染中,例如当我回到屏幕时,它又被重新加载了吗?自分页以来,我该如何阻止它发生,用户将不得不再次加载更多以恢复其数据,而我不希望那样?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。