2. 상향식 전달: 하위 컴포넌트 → 상위 컴포넌트
: dispatch를 이용해 하위 컴포넌트에서 상위 컴포넌트의 함수를 호출해 사용 할 수 있습다.
// child.svelte
<script>
import { createEventDispatcher } from 'svelte'
const dispatch = createEventDispatcher()
function addAction(param) {
console.log(param)
dispatch('add', {
value : param,
message: param + ' 값 추가'
})
}
</script>
<button on:click={() => addAction(10)} >Add 10</button>
<button on:click={() => addAction(20)} >Add 20</button>
// first.svelte
<script>
import SubChild from './subChild.svelte'
</script>
<SubChild on:add />
// App.svelte
<script>
import First from './first.svelte'
let value = 0
function handleValueAdd(event) {
value = value + event.detail.value
}
</script>
<p>value : {value}</p>
<Child on:add={handleValueAdd} />
<script>
import PanelComponent from './components/panelComponent.svelte'
let count = 10
function incrementCount(event) {
// count = count + 1
console.log(event.detail.message)
count ++
}
</script>
<PanelComponent {count} on:increment={incrementCount}/>
<script>
import ButtonComponent from './buttonComponent.svelte'
export let count
</script>
<div class="penal">
<h1>{count}</h1>
<ButtonComponent {count} on:increment />
</div>
<style>
.penal {
padding: 20px;
display:flex;
flex-direction: column;
justify-items: center;
justify-content: space-around;
align-items: center;
height: 500px;
width:400px;
background: #e2e2e2;
border: 1px solid #777777;
}
</style>
<script>
import {createEventDispatcher} from 'svelte'
const dispatch = createEventDispatcher()
function handleIncrement(param) {
dispatch('increment', {
message: '값 증가 :' + param
})
}
export let count
</script>
<button on:click={() => handleIncrement(10)} >
increment count [{count}]
</button>