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

RTK Query官方示例Posts列表加载异常与slice方法未定义报错求助

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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:45:04