npm create svelte@latest '디렉토리 명'
+page.svelte
가 index.html 역할<script lang="ts">
let name = 'World'
</script>
<h1>Hello {name}!</h1>
<!-- 동적 바인딩을 하려면 bind: 사용 -->
<input type="text" bind:value={name} />
<button on:click={() => (name = 'World')}>초기화</button>
<style>
h1 {
color: cadetblue;
}
</style>
{#if 조건식 혹은 boolean}
코드
{:else if 조건식 혹은 boolean}
코드
{:else}
코드
{/if}
{#each 배열 as 배열 변수명}
코드
{/each}
<!-- src/routes/+page.svelte -->
<script lang="ts">
import Movie from './movie.svelte'
let name = 'World'
let movieList = ['A', 'BB', 'CCC', 'DDDD']
</script>
<h1>Hello {name}!</h1>
<input type="text" bind:value={name} />
<button on:click={() => (name = 'World')}>초기화</button>
<Movie {movieList} />
<style>
h1 {
color: cadetblue;
}
</style>
<!-- movie.svelte -->
<script lang="ts">
export let movieList: string[] = []
</script>
<ul>
{#each movieList as movie}
<li>{movie}</li>
{/each}
</ul>
routes
(웹 루트 개념) 디렉토리에 +layout.svelte
파일 생성
slot에 대상 페이지(컴포넌트)가 로드 됨
<a href="/actor">영화 배우</a>
<slot />
라우팅을 통해 특정 컴포넌트로 이동 시 실행되는 함수
<!-- src/routes/actor/+page.svelte -->
<script lang="ts">
export let data: any
</script>
<ul>
{#each data.actorList as actor}
<li>{actor}</li>
{/each}
</ul>
<a href="/">홈</a>
<!-- src/routes/actor/+page.server.js -->
<!-- .server를 추가하면 SSR로 동작함 -->
export async function load() {
console.log('asdf')
return { actorList: ['톰 크루즈', '브래드 피드'] }
}
src/routes
이하의 +layout.svelte
에 할당하는 것이 적절<script lang="ts">
import { setContext } from 'svelte'
import { writable } from 'svelte/store'
const user = writable<string>()
$: user.set('USER NAME!')
setContext('user', user)
</script>
<a href="/actor">영화 배우</a>
<slot />
<!-- src/routes/+page.svelte -->
<script lang="ts">
import { getContext } from 'svelte'
import Movie from './movie.svelte'
const defaultUser = getContext('user')
let userName = $defaultUser
let movieList = ['몬티 파이튼의 성배', '아이언 맨', '올드보이']
</script>
<h1>Hello {userName}!</h1>
<input type="text" bind:value={userName} />
<button on:click={() => (userName = $defaultUser)}>초기화</button>
<Movie {movieList} />
<style>
h1 {
color: cadetblue;
}
</style>