RTK Query官方示例Posts列表加载异常与slice方法未定义报错求助
问题1 修复方案
- 报错原因:JSX 渲染逻辑中直接将 Post 数组/对象整体作为文本插入节点,JSX 会自动将非字符串、非数字类型的引用值转换为
[object Object]字符串展示。 - 修复步骤:
- 定位 Posts 列表的渲染代码段,删除直接输出
{posts}这类整体对象的语法 - 遍历 Posts 数组,单独渲染每条 post 对应的具体字段,例如
post.title、post.content、post.author等属性 - 参考渲染代码:
{posts.map(post => ( <div key={post.id} className="post-item"> <h3>{post.title}</h3> <p>{post.content.substring(0, 100)}...</p> </div> ))} - 定位 Posts 列表的渲染代码段,删除直接输出
问题2 修复方案
- 报错原因:代码中给
data: posts = []设置的默认值是空数组,但后续逻辑尝试访问posts.posts属性,数组本身不存在posts属性,因此posts.posts返回undefined,调用slice方法时自然触发报错。 - 修复步骤:
- 调整默认值匹配接口返回结构:如果
useGetPostsQuery接口返回的是{ posts: [文章数组] }格式的对象,就将默认值修改为{ posts: [] },修改后的解构代码如下:
const { data: posts = { posts: [] }, isSuccess, isLoading, isError, error, } = useGetPostsQuery()- 新增请求状态判断,仅在请求成功后再执行排序逻辑,避免未返回数据时执行无效逻辑:
const orderedPosts = useMemo(() => { if(!isSuccess) return [] const ordered = posts.posts.slice() ordered.sort((a, b) => b.date.localeCompare(a.date)) return ordered }, [posts, isSuccess])- 渲染时优先展示加载、错误状态,再渲染排序后的文章列表即可。
- 调整默认值匹配接口返回结构:如果
内容的提问来源于stack exchange,提问作者user16911633
相关产品推荐
相关产品推荐

