乐闻世界logo
搜索文章和话题

How to implement infinite list using React Query in react native with Flatlist

4 个月前提问
4 个月前修改
浏览次数19

1个答案

1

在React Native项目中使用React Query与FlatList组件来实现无限滚动列表的话,可以遵循以下步骤:

步骤 1: 安装和设置React Query

首先,确保你已经安装了React Query。如果还没有安装,可以通过npm或yarn来添加它。

bash
npm install react-query # 或者 yarn add react-query

步骤 2: 设置React Query Client

在你的项目中,你需要创建一个React Query client实例,并使用QueryClientProvider将其提供给你的应用。

jsx
import { QueryClient, QueryClientProvider } from 'react-query'; const queryClient = new QueryClient(); function App() { return ( <QueryClientProvider client={queryClient}> <MyComponent /> </QueryClientProvider> ); }

步骤 3: 使用useInfiniteQuery来获取数据

React Query的useInfiniteQuery钩子非常适合实现无限滚动功能。此钩子可以帮助你在用户接近列表底部时加载更多数据。

首先定义一个函数来获取数据,这个函数需要接收当前页码作为参数。

javascript
const fetchProjects = ({ pageParam = 1 }) => { return fetch(`https://api.example.com/projects?page=${pageParam}`) .then(res => res.json()); }

然后在组件中使用useInfiniteQuery

jsx
import { useInfiniteQuery } from 'react-query'; function Projects() { const { data, fetchNextPage, hasNextPage, isFetchingNextPage, } = useInfiniteQuery('projects', fetchProjects, { getNextPageParam: (lastPage, pages) => lastPage.nextPage ?? false, }); return ( <FlatList data={data.pages.flatMap(page => page.results)} onEndReached={() => hasNextPage && fetchNextPage()} onEndReachedThreshold={0.5} keyExtractor={(item) => item.id.toString()} renderItem={({ item }) => ( <Text>{item.name}</Text> )} ListFooterComponent={ isFetchingNextPage ? <ActivityIndicator /> : null } /> ); }

说明:

  • fetchProjects: 这是调用API获取数据的函数。根据传入的pageParam参数分页加载数据。
  • useInfiniteQuery: 这个钩子函数用于实现无限加载,通过getNextPageParam来确定是否还有更多的页数需要加载。
  • FlatList组件: React Native的FlatList用于渲染列表,并且它接受一个onEndReached回调,当列表滚动到接近底部时触发。通过这个属性,你可以调用fetchNextPage来加载更多数据。
  • ListFooterComponent: 当正在获取下一页数据时,可以显示一个加载指示器。

以上就是在React Native项目中使用React Query和FlatList组件实现无限滚动列表的基本步骤。这种方法可以有效地处理大量数据的加载,并保持良好的用户体验。

2024年8月5日 11:18 回复

你的答案