svelte 학습을 위한 프로젝트로 배틀그라운드 전적 검색 사이트를 만들고 있습니다.
https://github.com/dungong/pubg-web
한 3시간 정도 코딩을 진행 했는데, 이것저것 만져보느라 작업은 거의 진전이 없습니다.
흥미로웠던 점은
1) <input/> 테그의 value관리가 아주 쉽다는 것.
react에서는 보통 input 테그의 value를 아래와 같은 형태로 관리하게 되는데,
import {useState} from "react"
const MyInput = () => {
const [value,setValue] = useState("")
return (
<input value={value} onChange=(e => { setValue(e.target.value) })/>
)
}
같은 기능을 svelte로 구현하면 아래와 같다. 훨씬 간편하다. 원래는 bind:value={value} 지만, 축약하여 사용할 수 있다.
<script>
let value:string;
</script>
<input bind:value/>
아직 많은 기능을 살펴본 것은 아니지만 write less code라는 svelte의 철학이 확 와닿는 것 같다.
2) useEffect 와 비슷한 use:action
react에서 이벤트를 useEffcet를 사용하면
import {useEffect} from "react"
const MyInput = () => {
const handleScroll = () => {
// event handle logic ...
}
useEffect(()=>{
//컴포넌트가 렌더링될때 (componentDidMount)
window.addEventListner('click', handleScroll);
//컴포넌트가 화면에서 사라질때 (componentDidUnmount)
return ()=> window.removeEventLisnter('click', handleScroll);
},[])
return (
<input />
)
}
같은 기능을 svelte로 use:function은 useEffect와 같은 기능을 수행한다.
<script>
const handleScroll = (handler:() => void):
{ destroy: () => void } => {
document.addEventListener('scroll', onScroll, true);
return {
// 컴포넌트가 사라질때 use-effect의 clean-up function과 같이 동작 리턴 함수의 이름은 destroy로 정해져 있음.
destroy() {
document.removeEventListener('scroll', onScroll, true);
}
};
};
</script>
<div use:handleScroll={()=>{}}/>
'프로그래밍 > javascript' 카테고리의 다른 글
[javascript] sort함수 (0) | 2022.02.24 |
---|---|
javascipt 함수의 인터페이스 (0) | 2022.02.17 |
begining functional javascript 8장ㅇ=0 함수자 (0) | 2022.02.09 |
javascript의 this 그리고 [call,bind,apply] 함수 (0) | 2022.02.02 |
begining functional javascript 4장 클로저 (0) | 2022.01.19 |