Svelte 是一种全新的构建用户界面的方法。传统框架如 React 和 Vue 在浏览器中需要做大量的工作,而 Svelte 将这些工作放到构建应用程序的编译阶段来处理。
Svelte在语法上非常简单,和vue很像,但是api会简单很多,因此代码量会少很多,并且没有虚拟DOM,所以代码体积会小很多,也没有很复杂的状态管理。
let src = 'tutorial/image.gif';let name = 'Rick Astley';
p{color: purple;font-family: 'Comic Sans MS', cursive;font-size: 2em;}This is a paragraph.
This is a paragraph.
import Nested from "./Nested.svelte";
let string = `this string contains some HTML!!!`;{@html string}
let count = 0;function handleClick() {count++;}Clicked {count} {count === 1 ? 'time' : 'times'}
$: {console.log(`the count is ${count}`);alert(`I SAID THE COUNT IS ${count}`);}
$: if (count >= 10) {alert(`count is dangerously high!`);count = 9;}
let numbers = [1, 2, 3, 4];function addNumber() {numbers.push(numbers.length + 1);numbers = numbers;// 或者写成// numbers = [...numbers, numbers.length + 1];}$: sum = numbers.reduce((t, n) => t + n, 0);{numbers.join(' + ')} = {sum}
Add a number
export let answer;The answer is {answer}
export let answer = "hello";
import Info from './Info.svelte';const pkg = {name: 'svelte',version: 3,speed: 'blazing',website: 'https://svelte.dev'};
{#if user.loggedIn}Log out{/if}{#if !user.loggedIn}Log in{/if}
{#if x > 10}{x} is greater than 10
{:else if 5 > x}{x} is less than 5
{:else}{x} is between 5 and 10
{/if}
let cats = [{ id: 'J---aiyznGQ', name: 'Keyboard Cat' },{ id: 'z_AbfPXTKms', name: 'Maru' },{ id: 'OUtn3pvWmpg', name: 'Henri The Existential Cat' }];The Famous Cats of YouTube
{#each cats as cat,index}{index+1} {cat.name}{/each}
{#each things as thing (thing.id)} {/each}
let promise = getRandomNumber();async function getRandomNumber() {const res = await fetch(`tutorial/random-number`);const text = await res.text();if (res.ok) {return text;} else {throw new Error(text);}}function handleClick() {promise = getRandomNumber();}generate random number{#await promise then number}{number}
{/await}// 或者可以写的更详细{#await promise}...waiting
{:then number}The number is {number}
{:catch error}{error.message}
{/await}
let m = { x: 0, y: 0 };function handleMousemove(event) {m.x = event.clientX;m.y = event.clientY;}div { width: 100%; height: 100%; }The mouse position is {m.x} x {m.y}
The mouse position is {m.x} x {m.y}
import {createEventDispatcher} from "svelte";const dispatch = createEventDispatcher();function sayHello() {dispatch('message', {text: 'Hello!'});}Click to say hellos
message={handleMessage}/>
import FancyButton from './CustomButton.svelte';function handleClick() {alert('clicked');}
Click me
let name = 'world';bind:value={name}>Hello {name}!
bind:checked={yes}>
bind:group={flavours} value={flavour}>
bind:this={canvas}width={32}height={32}>.....// 这样在onMount生命周期里就可以获得canvas的DomonMount(() => {const ctx = canvas.getContext('2d');.....}
bind:value={pin} on:submit={handleSubmit}/>