export let
ルーンモードでは、コンポーネントのプロパティ は$props
ルーンで宣言され、親コンポーネントがデータを渡すことができます。
レガシーモードでは、プロパティはexport
キーワードでマークされ、デフォルト値を持たせることができます。
<script>
export let foo;
export let bar = 'default value';
// Values that are passed in as props
// are immediately available
console.log({ foo });
</script>
デフォルト値は、コンポーネントが作成されたときにundefined
になる場合に使用されます。
ルーンモードとは異なり、親コンポーネントによってプロパティが定義された値から
undefined
に変更された場合、最初の値に戻りません。
デフォルト値を持たないプロパティは必須と見なされ、値が提供されないとSvelteは開発中に警告を出しますが、デフォルト値としてundefined
を指定することで警告を抑えることができます。
export let let foo: undefined
foo = var undefined
undefined;
コンポーネントのエクスポート
エクスポートされたconst
、class
、またはfunction
宣言はプロパティとは見なされません。代わりに、コンポーネントのAPIの一部になります。
Greeter
<script>
export function greet(name) {
alert(`hello ${name}!`);
}
</script>
App
<script>
import Greeter from './Greeter.svelte';
let greeter;
</script>
<Greeter bind:this={greeter} />
<button on:click={() => greeter.greet('world')}>
greet
</button>
プロパティの名称変更
export
キーワードは宣言とは別に出現することがあります。これは、たとえば予約語の場合にプロパティの名前を変更する場合に役立ちます。
App
<script>
/** @type {string} */
let className;
// creates a `class` property, even
// though it is a reserved word
export { className as class };
</script>
<script lang="ts">
let className: string;
// creates a `class` property, even
// though it is a reserved word
export { className as class };
</script>