[Custom Components] Blocked when using dynamic children for rendering

这个报错通常出现在 Gradio 6.9.0 的自定义组件(Custom Components)中,当你在 Svelte 模板里用 {#await} 之类的动态渲染块包裹 {@render props.children?.()} 时,控制台会抛出 [Custom Components] Blocke

快速结论:这个报错通常出现在 Gradio 6.9.0 的自定义组件(Custom Components)中,当你在 Svelte 模板里用 {#await} 之类的动态渲染块包裹 {@render props.children?.()} 时,控制台会抛出 [Custom Components] Blocked when using dynamic children for rendering 并导致组件无法渲染;优先怀疑是 Gradio 6.9.0 的近期改动叠加 Svelte 模板限制导致,而非你的组件代码本身写错。

适用环境:Issue 中确认的环境为 gradio 6.9.0、gradio_client 2.3.0;正文未给出操作系统、Python、CUDA、显卡等信息,请勿臆测补写。

最快修复方案:暂无确认的一步修复方案。Issue 中维护者明确表示这是已知问题,并建议在修复前暂时回退到 Gradio 6.8.0(同样的代码在 6.8.0 可正常工作)。

注意事项:回退到 6.8.0 只是临时绕过,Issue 明确说明该问题与 Svelte 的限制相关,修复没有 ETA;即使把 {@render props.children?.()} 移出动态渲染块可以渲染,也不代表动态子节点在语义上被正确支持,仍需关注后续 Gradio 版本是否修复。

问题场景

用户在 Gradio 6.9.0 中开发自定义组件,Svelte 组件先在 {#await promise then value} 等动态渲染块内部渲染 {@render props.children?.()},组件渲染被阻断并在控制台输出 [Custom Components] Blocked when using dynamic children for rendering。Issue 指出同一份代码在 Gradio 6.8.0 中可正常工作。触发点与自定义组件的子节点(dynamic children)渲染方式有关,而不是模型、WebUI 或 Python 依赖问题。

报错原文

[Custom Components] Blocked when using dynamic children for rendering

原因分析

最可能的原因是 Gradio 6.9.0 对自定义组件子节点渲染机制做了近期改动,同时受到 Svelte 模板能力的限制。Issue 中维护者的原话是 “this is a known issue due to some recent changes and svelte limitations”,因此动态渲染块(如 {#await})内部的 {@render props.children?.()} 会被拦截,导致组件被阻塞渲染。Issue 只确认了“已知问题 + Svelte 限制”这一层原因,尚未说明具体是哪段实现改动引起,也没有给出修复时间。

环境排查

  • 确认 Gradio 版本:Issue 中触发版本为 gradio 6.9.0,正常版本为 gradio 6.8.0。
  • 确认 gradio_client 版本:Issue 中为 2.3.0。
  • 确认自定义组件的 Svelte 模板结构:{@render props.children?.()} 是否位于 {#await}{#if}{#each} 等动态渲染块内部。
  • 确认浏览器控制台是否出现同一条 [Custom Components] Blocked when using dynamic children for rendering 错误。
  • 操作系统、Python、CUDA、显卡等信息 Issue 未提供,无需作为排查前提。

解决步骤

  1. 先对照 Issue 中的最小复现结构,确认你的组件确实是在动态渲染块内部渲染 props.children,而不是在动态块外部渲染。
  2. 如果生产或开发流程不允许等待修复,可优先尝试把 Gradio 回退到 6.8.0;Issue 报告者和维护者均认可这是临时的可行做法。
  3. 作为代码层面的临时绕过,可优先尝试把 {@render props.children?.()} 移出 {#await} 等动态渲染块(Issue 示例中这样做可以正常渲染),但这会改变动态子节点的渲染时机,需要自行验证组件行为是否符合预期。
  4. 持续关注 gradio-app/gradio 中该 Issue 的后续进展;Issue 中提到希望将相关修复纳入 Gradio 6 Wrapup milestone,但尚未确认修复时间。
  5. 不要自行编造环境变量、启动参数或补丁版本号来“解决”该问题,Issue 中没有此类验证过的方案。

验证方法

使用与 Issue 相同的自定义组件 Svelte 代码重新构建并加载组件:如果控制台不再出现 [Custom Components] Blocked when using dynamic children for rendering,且 {#await} 内部的 {@render props.children?.()} 能正常输出子节点内容,说明问题已规避或已修复。若采用回退到 6.8.0 的方式,应确认同一组件在 6.8.0 下渲染正常,再决定是否继续在新版本中排查。

参考来源

gradio-app/gradio #13131

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 23964

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注