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

SWR查询结果解构报错:为何只能通过data.results访问results?

SWR解构data时出现"results未定义"的原因及解决

这是正常现象,核心原因是SWR的data在请求完成前是undefined:

  • SWR是异步请求库,组件初始化时请求还没完成,useSWR返回的data初始值为undefined。
  • 直接写{data:{results}}解构时,相当于在undefined上读取results属性,必然会抛出"results未定义"的错误。
  • 而用data.results的方式,当data为undefined时,表达式结果只是undefined,不会直接触发报错(除非你后续直接调用它的属性,比如data.results.length才会报错)。

解决办法

  • 给解构添加默认值,避免初始阶段报错:
    const { data: { results } = {}, error } = useSWR("https://xxxxxxxxxxxxxxxx", fetcher)
    
    这里给data设置空对象作为默认值,就算data是undefined,也会用空对象解构,results会是undefined但不会抛出错误。
  • 或者先判断data是否存在再解构:
    const { data, error } = useSWR("https://xxxxxxxxxxxxxxxx", fetcher)
    if (!data) return <div>加载中...</div>
    const { results } = data
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 18:12:07