如何将组件作为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
相关产品推荐
相关产品推荐

