React Native中Redux Toolkit Query按钮触发API调用问题
解决Redux Toolkit Query点击按钮触发API调用的问题
为什么数组解构会报错
RTK Query的useGetGenreMoviesQuery这类useQuery钩子返回的是对象,并非像useState那样的数组结构,所以用[getMovies, { ... }]这种数组解构方式必然报错,这是核心原因。
正确实现点击触发API调用的两种方案
方案1:初始不加载,仅点击按钮时发起请求
通过skip选项控制初始不自动请求,点击时调用refetch触发:
import { useState } from 'react'; import { useGetGenreMoviesQuery } from './your-api-slice'; const MovieList = () => { const [page, setPage] = useState(1); // 控制初始是否跳过请求 const [skipInitialFetch, setSkipInitialFetch] = useState(true); const { data, isLoading, error, refetch } = useGetGenreMoviesQuery(page, { skip: skipInitialFetch, }); const handleFetchMovies = () => { // 直接调用refetch触发请求 refetch(); // 如果需要切换页码,先更新page再触发 // setPage(prev => prev + 1); // refetch(); }; return ( <> <button onPress={handleFetchMovies}>加载电影</button> {/* 渲染数据逻辑 */} {isLoading && <Text>加载中...</Text>} {error && <Text>请求失败:{error.message}</Text>} {data && /* 渲染电影列表 */} </> ); };
方案2:初始已加载,点击按钮刷新/加载新数据
如果页面初始已经加载数据,点击按钮时要么刷新当前页,要么加载下一页:
import { useState } from 'react'; import { useGetGenreMoviesQuery } from './your-api-slice'; const MovieList = () => { const [page, setPage] = useState(1); const { data, isLoading, error, refetch } = useGetGenreMoviesQuery(page); // 刷新当前页数据 const handleRefresh = () => { refetch(); }; // 加载下一页(参数变化会自动触发新请求) const handleNextPage = () => { setPage(prev => prev + 1); }; return ( <> <button onPress={handleRefresh}>刷新</button> <button onPress={handleNextPage}>下一页</button> {/* 渲染数据逻辑 */} {isLoading && <Text>加载中...</Text>} {error && <Text>请求失败:{error.message}</Text>} {data && /* 渲染电影列表 */} </> ); };
排查refetch无效的常见原因
- 检查按钮的
onPress绑定是否正确,确保是onPress={() => refetch()}而非错误绑定 - 如果
page参数未变化,refetch会重新发起当前参数的请求;若要请求新数据,需先更新page状态 - 确认API切片的配置正确,没有设置错误的缓存策略导致请求被拦截
内容的提问来源于stack exchange,提问作者Jalal Mohammed
相关产品推荐
相关产品推荐

