TIL
TIL 2022-04-19 Svelte Tutorial 1~4
강에 뜨는 달
2022. 4. 19. 23:17
리액트와 유사한 부분은 넘어가고 인상적이었던 부분만 남기자면
<p>{@html string}</p>
로 HTML을 직접적으로 렌더링 할 수 있음. 그러나 sanitize하지 않기 떄문에 조심해야됨. React의 dangerousInnerHTML과 동일한데 얘는 이렇게 쉽게 할 수 있음.
Svelte에서는 다른 컴포넌트에서 값을 가져와야할때 export를 사용함
<script>
export let answer;
</script>
<p>The answer is {answer}</p>
이렇게 answer를 export하면
<script>
import Nested from './Nested.svelte';
</script>
<Nested answer={42}/>
다른 컴포넌트에서 import하여 answer를 주입하여 사용할 수 있음. props라고 봐도 될 듯
{#if user.loggedIn}
<button on:click={toggle}>
Log out
</button>
{/if}
{#if !user.loggedIn}
<button on:click={toggle}>
Log in
</button>
{/if}
html 상에서 특정 로직을 적용할떄 svelte에서는 이런 방식을 적용할 수 있다. Budibase에서 handlebar helper로 위와 같은 것을 만들었었는데 아마 스벨트 로직을 적용한듯?
{#if x > 10}
<p>{x} is greater than 10</p>
{:else if 5 > x}
<p>{x} is less than 5</p>
{:else}
<p>{x} is between 5 and 10</p>
{/if}
if, else if, else 등 다 쓸 수 있으며 /if문으로 닫아줘야함
반복문을 사용할떄는 each를 사용함.
{#each things as thing (thing.id)}
<Thing name={thing.name}/>
{/each}
이런식으로 {#each {배열} as {아이템} ({키})} 로 반복을 돌 수 있다.
재밌는점은 svelte에서는 자체적으로 Map을 사용하기 떄문에 key 값으로 객체를 넣어줘도 잘 작동한다는 것이다. 그래도 이왕이면 number, string 값 주는게 좋다. Referential Equality없이 동일성을 유지하기 때문임
{#await promise}
<p>...waiting</p>
{:then number}
<p>The number is {number}</p>
{:catch error}
<p style="color: red">{error.message}</p>
{/await}
또한 비동기 로직을 이렇게 직관적으로...! 표현할 수 있다. 이거는 진짜 좋아보인다.
내일은 6~9,10 까지 봐야겠다.
이거 다보고는 한번 스스로 환경 설치랑 국룰인 TODO리스트 만들기 해봐야지