Svelte · 04 $derived로 필터 계산하기
단계: 컴파일과 runes 기초 · 외부 실행 예제 · 미리보기 안내 · 저장 ID: svelte-step-04
목표와 학습 후 역량
- 필터 결과 수가 일치하는 제목 수와 같다.
- 정렬 뒤 원본 id 순서가 변하지 않는다.
선수 지식
4단위는 3단위 결과물과 실험 기록을 이어 사용합니다.
핵심 개념과 설명
의존성 추적
$derived는 계산 중 읽은 반응형 값에 의존합니다. 저장이나 요청 같은 부수 효과를 계산식 안에 넣지 않습니다.
여러 단계 계산
$derived.by는 여러 문장이 필요한 계산을 표현합니다. 결과를 반환하고 원본 배열을 변경하지 않아야 합니다.
실습 준비
예제 화면의 실행 범위 안내를 먼저 확인하세요. 다음은 과제를 별도 프로젝트로 확장할 때의 준비 환경입니다. 별도 Svelte 5 Vite 프로젝트에서 .svelte 파일을 컴파일해 실행합니다. 패키지 버전과 lockfile을 기록하세요. Frontory의 Svelte 미리보기는 실제 writable와 명시적 DOM 어댑터이며 .svelte 컴파일러나 runes 실행기가 아닙니다.
연결된 예제는 출발점입니다. 아래 과제 전체가 완성된 코드는 아니며, 예제의 지원 범위를 넘는 작업은 별도 프로젝트에서 수행하세요.
실습 과제
- src/App.svelte에 query와 onlyOpen을 추가하세요.
- $derived.by에서 필터 후 복사 배열을 정렬하세요.
- 검색과 완료 토글을 조합하고 원본 순서와 결과 순서를 비교하세요.
관찰할 변수
| 변수 | 기준 조건 | 바꿀 조건 | 예상할 변화·검증 가설 |
|---|---|---|---|
| 검색어 | 빈 문자열 | 카드 제목 일부 | 일치하는 카드만 보이고 원본 배열 순서는 유지된다. |
표의 예상은 측정 결과가 아닙니다. 한 번에 한 조건만 바꾸고 실제 결과가 다르면 원인을 기록하세요.
완료 조건
- 필터 결과 수가 일치하는 제목 수와 같다.
- 정렬 뒤 원본 id 순서가 변하지 않는다.
자가 점검
- sort 전에 복사하지 않으면 무엇이 바뀌나요?
- $effect로 파생 값을 복사하는 방식이 왜 불필요한가요?
공식 참고
연결된 예제와 실행 범위
미리보기는 Svelte writable/DOM 계약 실험입니다. runes·snippet·컴파일 결과는 실제 App.svelte를 Svelte 5 프로젝트에서 실행하세요.
원본 코드·기록은 자동으로 덮어쓰지 않습니다. 기존 예제를 초기화할 때도 필기는 유지됩니다.
다음 학습
이전: $state 객체의 변경 경로 · 다음: 조건 블록과 빈 화면