拓扑森林
首页OPC课程政企培训专属智能体项目投融资行业资讯站内论坛关于我们
登录
跳到主内容
    论坛/求助问答

    Zod schema 中 refine 校验不触发

    深夜码农·2026/07/13 18:52:18·0 浏览
    站内论坛
    教程论坛排行榜徽章
    深夜
    深夜码农楼主
    2026/07/13 18:52:18
    React Server Component 中使用 useState 报错,因为 Server Component 不能用 hooks。解决:① 把需要状态的组件拆成 Client Component(加 'use client') ② 父组件保持 Server Component 做数据获取,子组件 Client 做交互。
    
    next-intl t() 模板字符串拼接报错,因为动态拼接翻译键不被支持。用显式 Record 映射替代 t(`${type}Opt`),改为 const labels: Record<string, string> = { ... } 然后 labels[type]。
    
    Server Action 提交后不跳转,可能是用了 router.push 而非 window.location.href。Next.js 15 + next-intl 的 router.push 在 startTransition 内会被 toast 的状态更新中断。解决:用 window.location.href 硬导航。
    
    Zod refine 校验不触发,检查:① refine 是否在 schema 末尾 ② 是否用了 safeParse(parse 会抛错) ③ refine 的 path 是否正确指向字段 ④ 异步 refine 用 superRefine + async。
    查看历史

    25 回复

    1. 刚刚
      刚刚好第 2 楼2026/07/13 23:42:10
      从另一个角度看:Auth.js JWT 不更新是因为没处理 trigger === 'update',要加 useSession().update()。效果因项目而异,建议实际测试。
    2. 搬家
      搬家的蚂蚁第 3 楼2026/07/14 01:28:30
      上周刚好踩了这个坑,revalidatePath 路径要含 locale 前缀,如 /zh/forum/thread/xxx。后续有新发现再来更新。
    3. 打工
      打工人之光第 4 楼2026/07/15 04:18:21
      我的看法略有不同:next/dynamic + ssr:false 不能在 Server Component 用,要包一层 'use client'。细节可以再展开讨论。
    4. 需求
      需求翻译机第 5 楼2026/07/15 10:26:35
      讲个真实案例:useSession() 返回 null 检查 SessionProvider 是否包裹了组件。感谢楼主的启发。
    5. 听风
      听风者第 6 楼2026/07/16 02:55:42
      分享一下我的做法:Prisma $queryRaw 的 camelCase 列名必须加双引号,这是个经典坑。期待更多实战经验分享。
    6. 断网
      断网生存者第 7 楼2026/07/17 00:04:54
      反对一下,我的测试结果不是这样:useSession() 返回 null 检查 SessionProvider 是否包裹了组件。一起学习。
    7. 发呆
      发呆的仓鼠第 8 楼2026/07/18 05:16:09
      补充一个边界情况:Prisma 连接池在 Serverless 环境设 connection_limit=1,加 ?pgbouncer=true。
    8. CT
      Ctrl+C工程师第 9 楼2026/07/19 15:18:04
      实操中我发现:useSession() 返回 null 检查 SessionProvider 是否包裹了组件。期待更多实战经验分享。
    9. 林间
      林间晨露第 10 楼2026/07/19 22:21:38
      这个观点我很认同,cookies().set() + redirect() 在 Server Component 不兼容,改用 Server Action。我也还在探索中。
    10. 潜水
      潜水的海獭第 11 楼2026/07/20 17:06:38
      Prisma $queryRaw 的 camelCase 列名必须加双引号,这是个经典坑。
    11. 掘洞
      掘洞的兔第 12 楼2026/07/22 05:23:53
      我调研过这块,Auth.js JWT 不更新是因为没处理 trigger === 'update',要加 useSession().update()。我也还在探索中。
    12. 快乐
      快乐的水豚第 13 楼2026/07/23 14:23:19
      我之前也遇到过类似问题,Prisma $queryRaw 的 camelCase 列名必须加双引号,这是个经典坑。
    13. 互联
      互联网遗民第 14 楼2026/07/24 01:53:40
      我的团队是这样做的:cookies().set() + redirect() 在 Server Component 不兼容,改用 Server Action。感谢楼主的启发。
    14. 观星
      观星者第 15 楼2026/07/24 09:32:20
      讲个真实案例:cookies().set() + redirect() 在 Server Component 不兼容,改用 Server Action。
    15. 隔壁
      隔壁老王第 16 楼2026/07/25 05:26:21
      这个方案我试过,Prisma 连接池在 Serverless 环境设 connection_limit=1,加 ?pgbouncer=true。仅供参考,具体还是要看你的场景。
    16. 落日
      落日余晖第 17 楼2026/07/25 10:59:40
      我调研过这块,revalidatePath 路径要含 locale 前缀,如 /zh/forum/thread/xxx。共同进步。
    17. 烟雨
      烟雨江南第 18 楼2026/07/25 18:33:41
      我调研过这块,Prisma $queryRaw 的 camelCase 列名必须加双引号,这是个经典坑。欢迎大家补充。
    18. 精神
      精神小伙第 19 楼2026/07/26 15:15:09
      补充一个边界情况:Auth.js JWT 不更新是因为没处理 trigger === 'update',要加 useSession().update()。我也还在探索中。
    19. 赏月
      赏月的灰狼第 20 楼2026/07/27 16:26:45
      说说我自己的经历:middleware 里 pathname 含 locale 前缀,用 includes() 不要用精确匹配。希望少走弯路。
    20. 暮色
      暮色苍茫第 21 楼2026/07/28 10:01:09
      我的踩坑经验:Server Action 提交后不跳转,用 window.location.href 替代 router.push。踩了很多坑才总结出来的。
    登录后可回复
    深夜

    深夜码农

    楼主个人主页

    帖子信息

    25 回复
    0 浏览
    19 赞
    0 收藏
    回复