๊ธฐ๋ฅ ์์ฒญ์ด ๋ฌธ์ ์ ๊ด๋ จ๋์ด ์์ต๋๊น?
๊ธฐ๋ณธ DOM ์์์ ์ฌ์ฉ์ ์ ์ ์ด๋ฒคํธ๋ฅผ ์ถ๊ฐํ๋ ค๊ณ ํ ๋ ๋ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
Type '{ onswipestart: (event: CustomEvent<any>) => void; onswipemove: (event: CustomEvent<any>) => void; onswipeend: (event: CustomEvent<any>) => void; style: string; class: string; }' is not assignable to type 'HTMLProps<HTMLDivElement>'.
Property 'onswipestart' does not exist on type 'HTMLProps<HTMLDivElement>'.ts(2322)
์ฌ์ฉ์ ์ ์ ์ด๋ฒคํธ๋ Sveltes actions/use ์ง์๋ฌธ https://svelte.dev/examples#actions๋ฅผ ์ฌ์ฉํ์ฌ div
์์์ ์ ๋ฌ๋ฉ๋๋ค.
์ํ๋ ์๋ฃจ์
์ค๋ช
๋ค์ดํฐ๋ธ DOM ์์์ ๋ํ Svelte ์์
์ ์ฌ์ฉํ์ฌ ์ ๋ฌ๋ ์ฌ์ฉ์ ์ ์ ์ด๋ฒคํธ์ ๋ํ ์ ํ ๊ฒ์ฌ๋ฅผ ํ ์ ์์ต๋๋ค.
๊ณ ๋ คํ ๋์์ ๊ธฐ์ ํ์ญ์์ค
div๋ฅผ ๊ฐ๋ณ Svelte ๊ตฌ์ฑ ์์๋ก ๋ณํํ๋ ค๊ณ ์๋ํ ์ ์์ง๋ง ๊ธฐ๋ณธ DOM ์์์์๋ ์๋ํ๋ ๊ฒ์ด ๋ฐ๋์งํฉ๋๋ค.
์ถ๊ฐ ์ปจํ ์คํธ
์ฌ์ฉ์ ์ง์ ์ด๋ฒคํธ๋ฅผ ์์ ํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
<div
class="bottomSheet"
class:draggable
bind:this={bottomSheet}
use:swipeable
on:swipestart={handleSwipeStart}
on:swipemove={handleSwipeMove}
on:swipeend={handleSwipeEnd}
style="height:{height};bottom:{bottom};transform:translateY({$coords.ty}px);"
>
Svelte ๊ตฌ์ฑ ์์์ ์ฌ์ฉ์ ์ง์ ์ด๋ฒคํธ์ ๋ํ ๊ด๋ จ pull ์์ฒญ: https://github.com/sveltejs/language-tools/pull/303
์ก์ ์ด ์๋ ์์์๋ง ์ ์ฉ๋๋๋ก ํ๋ ๋ฐฉ๋ฒ์ด ์๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ํ๋ฉด ์ ์ธ๊ณ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
declare namespace svelte.JSX {
interface HTMLAttributes<T> {
onswipemove?: (event: CustomEvent<number> & { target: EventTarget & T }) => any;
}
}
" CustomEvent<any>
๋ก ํด๋ฐฑ"์ ์ฌ์ฉํ์ฌ ํ์ดํ์ ํฅ์์ํฌ ์๋ ์์ง๋ง ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ด๋ฒคํธ๋ฅผ ์๋ชป ์
๋ ฅํ๋ฉด "์กด์ฌํ์ง ์์" ์ค๋ฅ๋ฅผ ๋์ง๊ธฐ ์ํด ํ์ดํ์ ์์กดํ ์ ์๊ธฐ ๋๋ฌธ์ ์ ๋ ๊ทธ๋ ๊ฒ ํ์ง ์์ต๋๋ค. ์ก์
์ด ์๋ ์์์๋ง ์ ์ฉ๋๋ค๋ฉด ๊ทธ๋ฐ ๊ฒ์ ๊ด์ฐฎ์ต๋๋ค. ํ์ง๋ง ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ์ ์ด๋ป๊ฒ ๊ตฌํํ ์ง๋ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
ํ๋์์ ์ ํ์ ์ถ๋ก ํ๋ ๊ฒ์ ๊ฑฐ์ ๋ถ๊ฐ๋ฅํ ์์
์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ์์
๊ณผ ๊ฐ๋ฅํ ์ด๋ฒคํธ๋ฅผ ๋ช
์์ ์ผ๋ก ์
๋ ฅํ๋๋ก ํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์ ์ ์์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ๋ช
์์ ์ผ๋ก ์์
์ ์
๋ ฅํ๊ฑฐ๋ CustomEvent<any>
๋ก ๋์ฒดํ ์๊ธฐ๋ฅผ ๋ช
์์ ์ผ๋ก ์ ํํ๊ฒ ํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ ์๋๋ฆฌ์ค์ผ ์ ์์ง๋ง ์ง๊ธ์ @jasonlyu123 ์ ์๋ฃจ์
์ผ๋ก ์ถฉ๋ถํฉ๋๋ค. ํ๋ฅญํ ์์
์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
๋๋ ์ด๊ฒ์ ๋ค์ ํ ๋ฒ ๋ณด์๊ณ ์ง๊ธ์ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ด ๋ฌด์์ธ์ง์ ๋ํด ์๊ฒฌ์ด ๋๋ฉ๋๋ค.
use:YY
์ง์๋ฌธ์ด ์๋ DOM ์์์ on:XX
์ด๋ฒคํธ์ธ ๊ฒฝ์ฐ ์ค๋ฅ๋ฅผ ์จ๊ธธ ์ ์์ต๋๋ค. ๋จ์ ์ ์ด๋ฒคํธ๊ฐ ์์์ ์ผ๋ก ๋ชจ๋ ์ ํ์ด๋ผ๋ ๊ฒ์
๋๋ค. Svelte๋ ๋ณธ์ง์ ์ผ๋ก ๋งค์ฐ ๋์ ์ด๊ธฐ ๋๋ฌธ์ ๋๊ตฐ๊ฐ ๋ฒ๋ธ๋ง CustomEvents๋ฅผ ์ํํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ํฌ์ฐฉํ์ง ๋ชปํ ์๋ ์์ต๋๋ค.
CustomEvent<any>
๋์ฒด ์ถ๊ฐ๋ณธ์ง์ ์ผ๋ก ๋ชจ๋ ๋ณธ์ง์ ์ธ ์์ ์ ํ์ & {[key: string]: CustomEvent<any>}
๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ด๋ ์์ ๋์ด๋์ง ์์ _any_ ์์ฑ์ด CustomEvent<any>
๋ก ๋์ฒด๋จ์ ์๋ฏธํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ต์
1์ "๋์ ํน์ฑ" ๋ฌธ์ ์ "์์์ ์์" ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๋๊ตฐ๊ฐ๊ฐ myownAttribute
์ ๊ฐ์ ์ฌ์ฉ์ ์ ์ ์์ฑ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ์๋ชป๋ฉ๋๋ค.
any
๋์ฒด ์ถ๊ฐ์ต์
2์ ๋ง์ฐฌ๊ฐ์ง๋ก & {[key: string]: any}
ํด๋ฐฑ๋ง ์ถ๊ฐํฉ๋๋ค. ์ด๊ฒ์ ์ ํฉํ์ง ์์ ๊ฒ์ ๋ฌด์์ผ๋ก๋ ๋๋์๊ฐ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด๊ฒ์ ๋ ์ด์ ์คํ๋ฅผ ์ก์ง ์๋ ๋๊ฐ๋ก DOM์ ๋์ ํน์ฑ์ ๊ฐ์ฅ ์ ๋ง์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ก์ ์ด ์๋ ์์์๋ง ์ ์ฉ๋๋๋ก ํ๋ ๋ฐฉ๋ฒ์ด ์๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ํ๋ฉด ์ ์ธ๊ณ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.