[Document] Svelte - 2.Reactivity
🧶 𝗪𝗲𝗯/Svelte

[Document] Svelte - 2.Reactivity

 

https://yeomss.tistory.com/200?category=1011681 

 

[Document] Svelte - 1.Introduction

새로운 프론트엔드 프레임워크를 배워보고자 합니다. 최근에 라이징하고 있는 언어인 Svelte.js 입니다. 튜토리얼을 조금 해봤을 때는 React나 Vue 보다 훨씬 쉽고 간편한 느낌입니다. 앞으로 Document

yeomss.tistory.com

이전 글은 위의 링크를 따라가시면 됩니다.

같은 시리즈를 확인하고 싶으시다면 페이지 맨 하단의 [svelte-document] 태그를 이용해주세요.


 

 

 

 Assignments 

Svelte 의 강점은 state와 DOM을 동기화하는 반응성입니다. 특히 이벤트에 반응하는 기능을 예로 들 수 있습니다.

<script>
	let count = 0;

	function incrementCount() {
        count += 1
	}
</script>

<button on:click={incrementCount}>
	Clicked {count} {count === 1 ? 'time' : 'times'}
</button>

버튼을 클릭하면 카운팅이 올라갑니다. brace curly 안에 삼항연산자도 사용할 수 있습니다.

on:eventname 으로 이벤트를 바인딩할 수 있습니다.

<button on:click="{() => count += 1}">

물론 이런식으로 바로 함수를 호출하는 것도 가능합니다.

 

 

 Declarations 

Svelte 는 자동적으로 당신이 state를 변경할 때 DOM을 업데이트 합니다.

때때로 computed 된 state가 필요로 할 떄가 있습니다.

그럴 때는 $ 달러 기호를 사용합니다.

<script>
	let count = 0;
	$: doubled = count * 2;

	function handleClick() {
		count += 1;
	}
</script>

<button on:click={handleClick}>
	Clicked {count} {count === 1 ? 'time' : 'times'}
</button>

<p>{count} doubled is {doubled}</p>

반응형 선언문을 가질 수 있게 되었습니다.

물론 위와 같은 예제에서는 {count * 2}와 같이 사용할 수도 있겠지만

만약 여러 번 참조해야할 경우, 혹은 다른 반응형 값에 의존하는 값이 있을 경우 유용하게 사용할 수 있습니다.

<script>
	let count = 0;
    $: doubled = double(count);

	function incrementCount() {
        count += 1
	}

    function double(count) {
        count *= 2
        return count
    }
</script>

computed 계산에는 물론 함수도 사용할 수 있습니다.

 

 

 Statements 

Svelte 는 동적인 값을 선언하는 것에 제한을 두지 않으며, 또한 임의적인 문장도 실행시킬 수 있습니다.

예를 들면 console.log() 함수를 사용하여 로그를 찍는 것과 같습니다.

<script>
	let count = 0;
	$: console.log('the count is ' + count);

	function handleClick() {
		count += 1;
	}
</script>

<button on:click={handleClick}>
	Clicked {count} {count === 1 ? 'time' : 'times'}
</button>

 

<script>
	let count = 0;
	// $: console.log('the count is ' + count);
    
	$: {
	console.log('the count is ' + count);
	alert('I SAID THE COUNT IS ' + count);
}

	function handleClick() {
		count += 1;
	}
</script>

<button on:click={handleClick}>
	Clicked {count} {count === 1 ? 'time' : 'times'}
</button>

혹은 {} 를 이용하여 그룹화를 시켜 사용할 수도 있습니다.

<script>
	let count = 0;

	$: if (count >= 10) {
		alert('count is dangerously high!')
		count = 9;
	}


	function handleClick() {
		count += 1;
	}
</script>

<button on:click={handleClick}>
	Clicked {count} {count === 1 ? 'time' : 'times'}
</button>

또한 $: 뒤에 조건문을 달 수도 있습니다.

 

 

 Updating arrays and objects 

Svelte의 동적 반응성은 할당에 의해 실행되므로 push 나 splice 같은 메소드 사용은 자동적으로 갱신이 되지 않습니다.

예를 들어 다음과 같은 문장은 실행이 되지 않습니다.

<script>
	let numbers = [1, 2, 3, 4];

	function addNumber() {
		numbers.push(numbers.length + 1);
	}

	$: sum = numbers.reduce((t, n) => t + n, 0);
</script>

<p>{numbers.join(' + ')} = {sum}</p>

<button on:click={addNumber}>
	Add a number
</button>

Add a number 를 누르면 계산식에 숫자가 하나씩 추가되어 총 합을 구하는 코드입니다.

하지만 버튼을 눌러도 반응하지 않습니다. 이를 고치기 위한 하나의 방법은 할당을 추가하는 것입니다.

function addNumber() {
	numbers.push(numbers.length + 1);
	numbers = numbers;
}

그러나 spread 연산을 사용하여 더 자연스럽게 바꿀 수 있습니다.

function addNumber() {
	numbers = [...numbers, numbers.length + 1];
}

function addNumber() {
	numbers[numbers.length] = numbers.length + 1;
}

인덱스를 이용하여 요소를 할당하는 것 또한 잘 작동합니다.

 

 

 

 

 

 

 

 

 

 

#스벨트 도큐먼트 #svelte document #svelte 할당 #svelte 이벤트 #svelte 바인딩


 

728x90

'🧶 𝗪𝗲𝗯 > Svelte' 카테고리의 다른 글

[Document] Svelte - 3.Props  (0) 2022.04.06
[Document] Svelte - 1.Introduction  (0) 2022.03.21