You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用react-query分页请求JSONPlaceholder数据出现404错误如何解决?

错误原因
  • 查询函数入参格式不符合React Query的规范:React Query 调用查询函数时,只会传入一个上下文对象作为唯一参数,该对象包含queryKey(你传入的查询键数组)、signal等属性。你定义的fetchUsers声明了两个入参,第二个page永远不会被传值,最终为undefined,导致请求地址拼接为/users/undefined触发404。
  • 查询键未关联分页状态:你已经声明了page状态用于分页,但useQuery的查询键中写死了常量1,没有绑定page变量,后续调整页码也无法触发新的请求,无法实现分页功能。
修复方案

首先调整查询函数的参数逻辑,从上下文对象中提取查询键里的页码;再将查询键中的常量替换为page状态变量,完整修复后的代码如下:

import React,{useState} from 'react';
import {useQuery} from 'react-query';
import User from './User';

// 调整参数获取逻辑,从上下文的queryKey中取页码
const fetchUsers=async({queryKey})=>{
    const [_key, page] = queryKey;
    const res=await fetch(`https://jsonplaceholder.typicode.com/users/${page}`); 
    return res.json();
}

const Users = () => {
    const [page, setPage] = useState(1)
    // 查询键绑定page状态变量
    const {data,status}=useQuery(["users", page], fetchUsers);
    console.log(data);
    return (
        <div>
            <h1 className="Listtype">Users List</h1>
            {status==='loading'&& <i className="fas fa-spinner fa-4x fa-spin"></i>}
            {status==='error' && (
                <h2 className="text-center text-danger">There is some error</h2>
            ) }
            {status==='success' && (
                <div>
                   <h1>{JSON.stringify(data)}</h1>
                   {/* 可直接使用下方页码切换按钮实现分页交互 */}
                   <button onClick={()=>setPage(prev=>Math.max(prev-1,1))} disabled={page===1}>上一页</button>
                   <button onClick={()=>setPage(prev=>Math.min(prev+1,10))} disabled={page===10}>下一页</button>
                </div>
            )}
        </div>
    )
}

export default Users

注:JSONPlaceholder的用户接口总共有10条数据,所以下一页按钮限制了最大页码为10,你可以根据实际业务需求调整。

内容的提问来源于stack exchange,提问作者Niranjan Kushwaha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:45:02