在 Svelte 中你不能这样做。
你需要找出如何使用 Svelte 提供的 API 来实现相同的结果。
例如,你可以使用 <slot>
:
<TabPane
name="profile"
key="1"
>
<img slot="title" src="images/profile.svg" alt="Profile" />
<!-- some code, eg: -->
<div>Some code here</div>
</TabPane>
<!-- filename: TabPane.svelte -->
<h1>
<slot name="title" />
</h1>
<slot />
具有属性 slot="title"
的元素将被插入到 <slot name="title">
中
其余的元素将被插入到 <slot />
中
在React中,这相当于:
function TabPane({ title, children }) {
return (
<>
<h1>{title}</h1>
{children}
</>
);
}
如果您仅想传入标题字符串,可以使用 <svelte:fragment>
将字符串包装起来,以便您可以添加 slot="title"
属性
<TabPane
name="profile"
key="1"
>
<svelte:fragment slot="title">
string title here
<svelte:fragment>
<!-- some code, eg: -->
<div>Some code here</div>
</TabPane>
参考资料:
很多情况下,你会像Tan Li Hau建议的那样使用插槽。然而,也可以将组件作为props传递。为此,我们将使用<svelte:component>
。它具有一定的限制,但这是一种可能性。
https://svelte.dev/docs#svelte_component
<svelte:component>
通常,你会这样使用<svelte:component>
:
<script>
import Component from './component.svelte'
</script>
<svelte:component this={Component} foo={bar} />
上述内容与以下内容等价:
<script>
import Component from './component.svelte'
</script>
<Component foo={bar} />
这意味着我们可以通过props实际传递组件。
<!-- app.svelte -->
<script>
import ComponentA from './component-a.svelte'
import ComponentB from './component-b.svelte'
</script>
<ComponentA foo={ComponentB} />
渲染组件...
<!-- component-a.svelte -->
<script>
export let foo
</script>
<svelte:component this={foo} />
请注意以下几点限制:
Svelte 可能甚至没有设计用于此(尽管它可以工作)。所以,除非你真的需要这样做,否则请使用插槽。但现在你知道这是可能的了。
<svelte:fragment>
只允许字符串吗? - Naveen DA<> </>
),则可以以相同的方式使用<svelte:fragment>
。它可以包含任何内容。 - Nick