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

如何将组件作为Props传递?Svelte组件编译正常却不渲染的解决方法

问题修复方案

以下是导致组件无法渲染的核心问题及对应修复:

1. 组件名拼写错误

Compound form中组件名拼写错误,DynamicSeaerch应为DynamicSearch(缺少字母r)。

2. Props大小写不匹配

传递给DynamicSearch的quickAddform变量名,要和组件接收的quickAddForm保持驼峰大小写一致。

3. 动态组件渲染语法错误

Svelte中不能直接用变量作为组件标签,必须使用<svelte:component this={组件变量} />语法渲染动态组件。

4. Props解构语法错误

剩余参数...必须放在解构的最后位置,不能放在开头。

5. 标签未闭合 & Props传递格式错误

Compound form中组件标签未闭合,且props传递时不需要加逗号,正确格式为属性名={值}(布尔值可简写为属性名)。


修正后的完整代码:

DynamicSearch.svelte

<script>
   // 剩余参数...restProps必须放在解构末尾
   let { quickAdd=false, quickAddForm, ...restProps } = $props(); 
</script>

<!-- 其他表单内容 -->
{#if quickAdd}
  <!-- 使用svelte:component渲染动态组件 -->
  <svelte:component this={quickAddForm} />
{/if}

Form.svelte

<script>
</script>

<form>
 <input type="text" required/>
 <input type="number" name="age" required/> <!-- 修正input类型:不存在age类型,改为number -->
</form>

CompoundForm.svelte

<script>
import DynamicSearch from "$lib/components/DynamicSearch.svelte";
import Form from "$lib/components/Form.svelte";
</script>
<form>
  <!-- 修正组件名、props大小写,闭合标签,去掉多余逗号 -->
  <DynamicSearch quickAdd quickAddForm={Form} />
</form>

额外说明:Form组件中的<input type="age">是无效的HTML输入类型,改为type="number"可避免浏览器解析异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 09:22:39