RTK Query中selectById失效、task为undefined问题求助
RTK Query selectById 失效,task变量返回undefined(responseData数据正常且ID匹配)
我正在使用本地JSON数据测试RTK Query查询,遇到selectById无法正常工作的问题,最终得到的task变量始终为undefined。目前确认在执行selectById步骤之前的流程均正常,responseData中包含所需数据且目标ID确实存在于数据中,反复排查仍找不到问题所在。
已查阅RTK Query官方文档但未解决问题,以下附上相关代码及信息,恳请各位提供帮助:
本地JSON数据
[ { "id": "1", "title": "完成RTK Query测试", "content": "调试selectById逻辑" }, { "id": "2", "title": "整理代码示例", "content": "准备Stack Overflow提问素材" } ]
tasksSlice 代码
import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'; export const tasksApi = createApi({ reducerPath: 'tasksApi', baseQuery: fetchBaseQuery({ baseUrl: './data/' }), endpoints: (builder) => ({ getAllTasks: builder.query({ query: () => 'tasks.json', providesTags: ['Task'] }), getTaskById: builder.query({ query: (taskId) => 'tasks.json', selectFromResult: ({ data }) => data?.find(task => task.id === taskId) }) }) }); export const { useGetAllTasksQuery, useGetTaskByIdQuery } = tasksApi;
Home 组件代码
import { Link } from 'react-router-dom'; import { useGetAllTasksQuery } from './tasksSlice'; export default function Home() { const { data: tasks, isLoading, error } = useGetAllTasksQuery(); if (isLoading) return <div>加载中...</div>; if (error) return <div>加载任务列表失败</div>; return ( <div className="task-list"> <h2>任务列表</h2> {tasks.map(task => ( <div key={task.id} className="task-item"> <Link to={`/tasks/${task.id}`}>{task.title}</Link> </div> ))} </div> ); }
TaskContainer 组件代码
import { useParams } from 'react-router-dom'; import { useGetTaskByIdQuery } from './tasksSlice'; export default function TaskContainer() { const { id } = useParams(); const { data: task, isLoading, error } = useGetTaskByIdQuery(id); console.log('当前ID:', id); console.log('获取到的任务:', task); // 此处输出undefined if (isLoading) return <div>加载任务详情中...</div>; if (error) return <div>加载任务详情失败</div>; if (!task) return <div>未找到对应任务</div>; return ( <div className="task-detail"> <h2>{task.title}</h2> <p>{task.content}</p> </div> ); }
responseData 截图说明
截图显示
responseData为包含对应ID任务的数组,数据结构与内容均符合预期,ID匹配无误。
内容的提问来源于stack exchange,提问作者JorBrown
相关产品推荐
相关产品推荐

