diff --git a/_posts/2024-02-23-svelte5-runes-tutorial.md b/_posts/2024-02-23-svelte5-runes-tutorial.md index f283f3439..327ff1d39 100644 --- a/_posts/2024-02-23-svelte5-runes-tutorial.md +++ b/_posts/2024-02-23-svelte5-runes-tutorial.md @@ -161,6 +161,92 @@ Runes는 Svelte 5에서 도입된 핵심 개념으로, 이 반응성을 강화 Number: {valueObject.num} ``` +#### sveltekit 에서 외부 js 파일로 사용하기 + +[Svelte 공식문서 예제](https://svelte.dev/blog/runes#beyond-components) 를 따라해 보았습니다. 별도의 js/ts 파일에서 runes 을 사용하려면 확장자가 `.svelte.js` 또는 `.svelte.ts` 이어야 합니다. + +> `counter.svelte.js` + +😱 **주의**: 반응형 변수(`$state`)는 반드시 클래스 또는 함수 멤버여야 한다. + +```js +export function createCounter() { + let count = $state(0); + // let count = 0; // 안변함 (반응형 변수가 아니라서) + return { + get count() { + return count; + }, + increment: () => (count += 1), + }; +} +``` + +> `test-page.svelte` + +```html + + + +``` + +#### 자식 컴포넌트에 반응형 객체를 전달하기 + +> `Child.svelte` + +구조가 해제된 변수(destructured variable)의 JDoc 타입 표현은 `@type` 으로 구조를 모두 풀어쓰면 된다. + +- 참고 : [How to document destructured variable with jsdoc](https://stackoverflow.com/a/72012216/6811653) +- [Snippet 의 타입](https://svelte-5-preview.vercel.app/docs/snippets#typing-snippets)은 `import('svelte').Snippet` 이다. + - `@render` 지시자로 처리하고, 파라미터로 동적으로 생성할 수 있다. + - `children` 스니펫은 하위 컴포넌트 태그 안의 모든 내용을 지시하는 예약어이다. + - 별도의 이름은 `{#snippet}...{/snippet}` 으로 지정할 수 있다. [Demo](https://svelte-5-preview.vercel.app/#H4sIAAAAAAAAE41S247aMBD9lVFYCegGsiDxks1G7T_0bdkHJ3aI1cR27aEtsvzvtZ0LZeGhiiJ5js-cmTMemzS8YybJ320iSM-SPPmmVJImeFEhML9Yh8zHRp51HZDC1JorLI_iiLxXUiN8J1XHoNGyh-U2i9F2SFy-epon1lIY9IwzRwNv8B6wI1oIJXNYEqV8E8sUfuIlh0MKSvPaX-zBpZ-oFRH-m7m7l5m8uyfXLdOaX5X3V_bL9gAu0D98i0V2NSWKwQ4lSN7s0LKLbgtsyxgXmT9NiBe-iaP-DYISSTcj4bcLI7hSDEHL3yu6dkPfBdLS0m1o3nk-LW9gX-gBGss9ZsMXuLu32VjZBdfRaelft5eUN5zRJEd9Zi6dlyEy_ncdOm_IxsGlULe8o5qJNFgE5x_9SWmpzGp9N2-MXQxz4c2cOQ-lZWQyF0Jd2q_-mjI9U1fr4FBPE8iuKTbjjRt2sMBK0svIsQtG6jb2CsQAdQ_1x9f5R9tmIS-yPToK-tNkQRQGL6ObCIIdEpH9wQ3p-Enk0LEGXwe4ktoX2hhFai5Ofi0jPnYc9QF1LrDdRK-rvXjerSfNitQ_TlqeBc1hwRi7yY3F81MnK9KtsF2n8Amis44ilA7VtwfWTyr-kaKV-_X4cH8BTOhfRzcEAAA=) + - 가끔 `Svelte SSR validation error` 이 나오는데 다시 시작하면 없어진다. + +```html + + +