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

NextJS 13 App目录:Prisma取数后客户端组件Team不显示问题

问题排查与修复方案

第一步:确认数据是否正确传递

先检查浏览器控制台的Barbers:输出:

  • 如果没有输出数据,说明父Server组件传递参数有误:
    • 核对父组件传递的props名称是否为barbers,避免拼写错误
    • 在Server组件中打印Prisma查询结果,确认数据已正确获取
    • 确认父组件已正确导入并渲染Team组件

第二步:数据已传递时的渲染逻辑修复

如果控制台能看到barbers数组,问题出在组件本身的渲染逻辑:

  1. 卡片隐藏未恢复可见
    理发师卡片初始class为opacity-0,只有触发动画后才会添加anim3类,但需确保你的CSS中anim3包含显示样式:
.anim3 {
  opacity: 1;
  transition: opacity 0.6s ease-in-out;
}

若未定义该样式,卡片会一直处于隐藏状态。

  1. Intersection Observer配置不合理
    当前rootMargin: "100%"的设置会让元素在距离视口上方100%高度时就触发动画,可能导致页面加载后动画未触发(元素未进入有效观测范围)。调整配置为更合理的值:
const observerOptions = {
  root: null,
  rootMargin: "0px",
  threshold: 0.1, // 元素进入视口10%时触发动画
};
  1. 冗余代码清理
    组件中定义的data状态从未使用,可直接删除,避免混淆:
// 删除此行
const [data, setData] = useState<Barber[]>([]);
  1. Image组件边界处理
    当barbers数量超过3时,Image的src会返回空字符串导致报错,可添加默认图或限制显示数量:
  • 限制显示前3个:
{barbers.slice(0,3).map((barber: Barber, index: number) => (...))}
  • 设置默认图:
src={
  index === 0 ? barber1 :
  index === 1 ? barber2 :
  index === 2 ? barber3 :
  barber1 // 替换为你的默认图片
}
  1. key值优化
    避免使用index作为key,改用barber的唯一标识(如Prisma模型中的id):
key={barber.id}
  1. 增强类型校验
    给组件props添加类型定义,确保传入数据符合预期:
interface TeamProps {
  barbers: Barber[];
}

export default function Team({ barbers }: TeamProps) {
  // 组件逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:33:18