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

Next.js中YouTube播放列表缩略图加载失败问题排查

问题根源

YouTube Data API 返回的播放列表项中,并非所有视频都包含全尺寸的缩略图:

  • maxres(最高清)缩略图仅在视频本身为高清分辨率时才会存在,低分辨率视频可能没有该字段;
  • 极少数情况下,甚至default级别的缩略图也可能缺失(概率极低,但需兼容)。

你单独访问result.items[0].snippet.thumbnails.maxres.url正常,是因为第一个视频恰好有高清缩略图,但遍历到其他无该字段的视频时,就会触发Cannot read properties of undefined (reading 'url')错误。

解决方案

使用可选链操作符(?.)安全访问嵌套属性,同时添加降级逻辑,确保总有可用的缩略图:

修改遍历代码如下:

{result.items.map((res, idx) => {
  // 优先取高清图,依次降级到默认图,最后可设置兜底图
  const thumbnailUrl = res.snippet.thumbnails.maxres?.url 
    ?? res.snippet.thumbnails.high?.url 
    ?? res.snippet.thumbnails.medium?.url 
    ?? res.snippet.thumbnails.default?.url 
    ?? '/path/to/your/default-image.jpg'; // 可选:本地兜底图

  return <ShowCard result={thumbnailUrl} key={idx} />;
})}

关键说明:

  • ?.:当左侧属性为undefined或null时,直接返回undefined,不会继续访问后续属性,避免报错;
  • ??:空值合并运算符,仅当左侧为undefined或null时,才会取右侧的值,确保优先使用高分辨率图。
额外检查

如果仍有报错,建议在getStaticProps中打印完整的result数据,确认是否存在某个播放列表项的snippet.thumbnails本身为undefined,这种极端情况可再加一层可选链:res.snippet?.thumbnails?.default?.url。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:24:04