svelte의 가장 강조되고 있는 기능 중에 하나가 바로 reactivity 즉 손쉬운 반응성 구현입니다.
반응성이란 선언된 state의 상태에 따라서 특별한 호출 없이 HTML 영역 및 바라보는 변수 들의 상태가 바로바로 변경되는 것 이라고 생각하시면 되겠습니다.
간단한 예제를 통해 이 반응성을 알아보겠습니다.
예를 들어 다음과 같은 예제를 만들었을 때 p태그 안의 내용은 특별한 직접적인 조작 없이 state의 상태에 따라서 보이고 안보이고가 결정됩니다. 이것이 바로 reactivity 즉 반응성입니다.
<script>
// state 생성
let active = false
</script>
<span><input type="checkbox" bind:checked={active} /> 상태</span>
<br>
<p class:view={!active} >active is {active}</p>
<style>
.view {
display: none;
}
</style>
작성된 코드를 보면 좀 더 이해가 쉬울 것입니다. 다음은 count 변수를 주고, 이 변수가 +1 씩 증가하는 버튼을 만들어 count 값이 증가하는 코딩입니다.
<script>
let count = 0
function handleClick() {
// 이벤트 코드
count += 1
}
</script>
<button on:click={handleClick} >
클릭수 { count } {count === 1 ? 'time' : 'times'}
</button>
handleClick액션을 주면 count 값이 계속 증가하게 됩니다. 그리고 이 증가한 내용은 즉시 html영역에 반영이 됩니다. html영역을 값에 따라 변화를 주기위해 특별한 호출이 필요하지 않습니다. 단지 변수를 선언하고, 그 변수를 바라 보게만 하면 되는 것입니다.
삼항연산자 설명
변수 == 값 ? '참일때' : '거진일때'
위의 연산자는 아래의 if문을 심플하게 구현한 코드입니다. 이것을 삼항연산자라고 합니다.
if(변수) {
'참'
}
else {
'거짓'
}
$: 설명
HTML영역 뿐만 아니라 스크립트 영역도 이와 비슷한 방식으로 작성이 가능합니다. let, const로 변수를 지정하지 않고 반응성을 주고 싶은 변수는 $:로 정의하기만 하면 됩니다.
예제로 조금전 만든 코드에 doubled라는 변수를 $:로 선언해 어떻게 작동하는지 보도록 하겠습니다.