reactjs - React Query - 为什么我的分页查询没有被触发?
问题描述
我正在尝试实现分页查询。但我没有调用内部 API 的分页端点,就像文档中的示例一样:
function Todos() {
const [page, setPage] = React.useState(0)
const fetchProjects = (page = 0) => fetch('/api/projects?page=' + page).then((res) => res.json())
const {
isLoading,
isError,
error,
data,
isFetching,
isPreviousData,
} = useQuery(['projects', page], () => fetchProjects(page), { keepPreviousData : true })
return ...
我正在调用 Youtube 数据 API。它将“nextPageToken”作为 i 请求选项的一部分。“CAoQAA”似乎是默认值。但是对于下一个值,我需要传递上一个调用的返回令牌(我目前使用 valtio. 将其设为全局)
(仅供参考,valtio 只是有一个对象(在我的例子中称为 store),其中更改它的值只会导致依赖于该键的组件重新呈现。如果这听起来很有趣,您可以查看这篇文章)
无论如何,我不会在前一个 API 调用之后立即进行下一个 API 调用。一旦我检测到 50 件(我一次只能获得 50 件)物品中的大部分已经被看到,我需要更多的 YT 物品:
useEffect(() => {
if (playlist && (slicePosition + maxItems) > playlist.length) {
setNextPageToken(store.nextPageToken)
}
},[playlist, slicePosition])
这个 setNextPageToken() 命令应该触发 useQuery 钩子。因为我假设一旦 Query 键更改,它将触发重新获取。但这不是我寻求指导的原因。
以下是查询的设置方式:
const {isLoading, isSuccess, error, data} = useGetPlaylist(playlistId, isFetchingYTPlaylist, nextPageToken)
function useGetPlaylist(playlistId, isFetchingYTPlaylist, token) {
const result = useQuery({
queryKey:["playlist", playlistId, token],
queryFn: () =>
getPlaylist(playlistId, token),
enabled: isFetchingYTPlaylist,
config: {
onSuccess(plaslists) {
for (const pl of plaslists) {
QueryClient.setQueryData(
['playlist', {playlistId: pl.id}],
pl
)
}
store.isFetchingYTPlaylist = false
}
},
keepPreviousData : true
})
return result
}
(我知道,我在全球商店中有 nextPageToken。但我不知何故需要重新获取和重新渲染,所以我传递了 nextPageTooken。)
解决方案
推荐阅读
- javascript - 如何在本地项目结构中保留 js 脚本并使用它 [Angular]
- c++ - 如何配置 basler 相机以不获取重复图像
- amazon-web-services - Lambda 定价仅限于账户或组织?
- javascript - 如何跨服务器为用户存储数据不和谐
- python - 如何使用 Twython 发送直接消息?
- db2 - 检查 DB2 中值的幂
- c# - Azure 中的多步骤任务
- amazon-cloudfront - 我们如何使用请求和标头信息监控到达云端的请求
- android - 手动创建 api 后错误删除的 Firebase 凭据 API 无法正常工作
- jenkins - 如何在不使用参数的情况下在下游构建中获取上游构建的所有者?