Props
到目前為止枷邪,我們只處理內(nèi)部狀態(tài)榛搔,也就是說,只能在給定的組件中訪問這些值。
在任何真正的應(yīng)用程序中践惑,都需要將數(shù)據(jù)從一個(gè)組件傳遞到其子組件腹泌。要做到這一點(diǎn),我們需要聲明屬性尔觉,通常簡稱為“ props”凉袱。在Svelte中,我們使用export
關(guān)鍵字來實(shí)現(xiàn)這一點(diǎn)侦铜。編輯Nested.svelte組件:
<script>
export let answer;
</script>
<p>The answer is {answer}</p>
就像 $: 专甩,剛開始可能會(huì)感覺有點(diǎn)奇怪。在JavaScript模塊中導(dǎo)出通常不是這樣工作的钉稍!現(xiàn)在就順其自然吧ーー它很快就會(huì)成為你的第二天性涤躲。
App.svelte文件:
<script>
import Nested from './Nested.svelte';
</script>
<Nested answer={42}/>
Props默認(rèn)值
在neted.svelte中,我們可以很容易地為道具指定默認(rèn)值:
<script>
export let answer = 'a mystery';
</script>
如果我們現(xiàn)在添加第二個(gè)沒有傳值的組件贡未,它將會(huì)使用默認(rèn)值:
<Nested answer={42}/>
<Nested/>
輸出:
The answer is 42
The answer is a mystery
Props傳值
如果你有一個(gè)屬性對(duì)象种樱,你或者會(huì)這樣傳值:
<script>
import Info from './Info.svelte';
const pkg = {
name: 'svelte',
version: 3,
speed: 'blazing',
website: 'https://svelte.dev'
};
</script>
<Info name={pkg.name} version={pkg.version} speed={pkg.speed} website={pkg.website}/>
但在Svelte中,你可以這樣:
<script>
import Info from './Info.svelte';
const pkg = {
name: 'svelte',
version: 3,
speed: 'blazing',
website: 'https://svelte.dev'
};
</script>
<Info {...pkg}/>
Info.svelte代碼:
<script>
export let name;
export let version;
export let speed;
export let website;
</script>
<p>
The <code>{name}</code> package is {speed} fast.
Download version {version} from <a >npm</a>
and <a href={website}>learn more here</a>
</p>
當(dāng)然俊卤,如果需要引用傳遞到組件中的所有鍵值缸托,包括那些沒有通過
export
聲明的鍵值,則可以直接訪問$props
瘾蛋。一般不推薦使用俐镐,因?yàn)镾velte很難進(jìn)行優(yōu)化,但在少數(shù)情況下非常有用哺哼。
如果想親自演練以上的功能佩抹,可以穩(wěn)步到Sevlte官網(wǎng)教程中親自體驗(yàn):Props
由于平臺(tái)限制,所有外鏈均被刪減取董,加上外鏈將會(huì)審核不通過棍苹,所以,想看完整版請(qǐng)移步至掘金茵汰。