Svelte에서 on:input 이벤트 처리하기
Svelte에서 폼을 다룰 때, 사용자의 입력에 실시간으로 반응해야 하는 경우가 많습니다. 이번 블로그 글에서는 on:input 이벤트를 처리하여 입력 필드의 값이 변경될 때마다 변수를 업데이트하는 방법을 알아보겠습니다.
입력 필드 설정
먼저, Svelte에서 기본적인 입력 필드를 설정해보겠습니다. 입력 값을 변수에 바인딩하고, on:input 이벤트를 사용하여 입력이 변경될 때마다 함수를 호출합니다.
<script>
let searchText = '';
function searchFilter() {
console.log('변경된 입력 값:', searchText);
}
</script>
<input type="text" id="search" bind:value={searchText} on:input={searchFilter} />
이 예제에서는 id가 "search"인 입력 필드를 만들었습니다. Svelte의 bind:value 지시어를 사용하여 입력 필드의 값을 searchText 변수에 바인딩합니다. 이를 통해 searchText가 항상 입력 필드의 값과 동기화됩니다.
on:input 이벤트 처리
on:input 이벤트는 사용자가 입력 필드에 타이핑할 때마다 트리거됩니다. 이 이벤트에 searchFilter 함수를 연결하여 입력 값이 변경될 때마다 작업을 수행할 수 있습니다.
<input type="text" id="search" bind:value={searchText} on:input={searchFilter} />
searchFilter 함수는 입력 값이 변경될 때마다 호출됩니다. 이 예제에서는 단순히 searchText의 새로운 값을 콘솔에 로그로 출력합니다. 그러나 이 함수를 사용자 정의하여 항목 목록을 필터링하거나 API 호출을 수행하는 등 다양한 작업을 수행할 수 있습니다.
예제: 목록 필터링
사용자의 입력에 따라 항목 목록을 필터링하는 예제를 확장해보겠습니다. 항목 목록을 만들고, 입력 값이 변경될 때마다 표시되는 항목을 업데이트합니다.
<script>
let searchText = '';
let items = ['Apple', 'Banana', 'Cherry', 'Date', 'Elderberry'];
let filteredItems = items;
function searchFilter() {
filteredItems = items.filter(item => item.toLowerCase().includes(searchText.toLowerCase()));
}
</script>
<input type="text" id="search" bind:value={searchText} on:input={searchFilter} />
<ul>
{#each filteredItems as item}
<li>{item}</li>
{/each}
</ul>
이 예제에서는 항목 목록과 초기값이 전체 목록으로 설정된 filteredItems 배열을 가지고 있습니다. searchFilter 함수는 사용자의 입력에 따라 filteredItems를 업데이트하여 검색 텍스트와 일치하는 항목만 포함하도록 필터링합니다.
결론
Svelte에서 on:input 이벤트를 처리하는 것은 간단하면서도 강력합니다. 입력 값을 변수에 바인딩하고 on:input 이벤트를 사용하여 실시간으로 사용자 입력에 반응할 수 있습니다. 목록을 필터링하거나 API 호출을 수행하는 등 다양한 작업을 쉽게 처리할 수 있습니다.
'프론트' 카테고리의 다른 글
[Svelte] 애니메이션 검색 창 만들기 (0) | 2024.12.14 |
---|---|
복사 방지 해제 법 (0) | 2024.12.13 |
텍스트 무지개 애니메이션 (1) | 2024.11.27 |
쉘 스크립트 - 변수 (0) | 2024.11.14 |
js every (0) | 2024.11.13 |