(前回の演習と)同様、どのような DOM 要素をレンダリングするのかいつも事前にわかるとはかぎりません。ここで便利なのが <svelte:element>
です。前回の演習と同じように、長いif
ブロックの列を1つの動的なコンポーネントで置き換えることができます:
App.svelte
<select bind:value={selected}>
{#each options as option}
<option value={option}>{option}</option>
{/each}
</select>
<svelte:element this={selected}>
I'm a <code><{selected}></code> element
</svelte:element>
this
の値は任意の文字列、または falsy な値です。falsy である場合、要素はレンダリングされません。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<script>
const options = ['h1', 'h2', 'h3', 'p', 'marquee'];
let selected = options[0];
</script>
<select bind:value={selected}>
{#each options as option}
<option value={option}>{option}</option>
{/each}
</select>
{#if selected === 'h1'}
<h1>I'm a <code><h1></code> element</h1>
{:else}
<p>TODO others</p>
{/if}