Post

Slot Props

♧ Slot Props

  • 설명
    Slot Props는 Child의 필드를 Parent에 전달하기 위하여 사용한다.
    변수 뿐만 아니라 함수도 전달할 수 있다.

▶ 사용법1: Svelte example and more

  • 파일: App.svelte
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<script>
	let name = 'world';
	import Outer from "./Outer.svelte"
	import Inner from "./Inner.svelte"
</script>

<h1>Hello {name}!</h1>

<Outer>
	// outer에 있는 slot을 Inner에 적용할 수도 있는 듯 하다?
	<Inner slot="inner" let:alert let:click on:click={alert}>
		{#if click > 5}
			<div>
				clicked more than 5
			</div>
		{/if}
	</Inner>
</Outer>
  • 파일: Outer.svelte
1
2
3
4
5
6
7
8
9
10
<script>
	let click = 0;

	function alert(){
		click += 1;
		console.log("alert")
	}
</script>

<slot name="inner" {click} {alert}></slot> // alret 함수와 click 변수를 Parent에 전달
  • 파일: Inner.svelte
1
2
<p on:click>Click me!</p>
<slot/>


▶ 사용법2

  • 설명
    Button의 isHovered를 parent에서 사용
  • 파일: App.svelte
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<script>
	let name = 'world';
	import Button from "./Button.svelte"
</script>

<h1>Hello {name}!</h1>

<Button let:isHovered>
	{#if isHovered}
		<div>
			isHovered
		</div>
	{/if}
	Button!
</Button>
  • 파일: Button.svelte
1
2
3
4
5
6
7
<script>
	let isHovered = false;
</script>

<button on:mouseenter={()=>{isHovered = true}} on:mouseleave={()=>{isHovered = false}}>
	<slot {isHovered}>test</slot>
</button>
This post is licensed under CC BY 4.0 by the author.