组件
基础组件

Hello {name}!

组件结构
<script>组件逻辑(JS/TS)
Markup{表达式} 的 HTML 模板
<style>作用域 CSS(自动限定到组件)
<script context="module">每个模块只运行一次,不随实例重复
响应式
响应式赋值
响应式声明

$: 标记响应式声明和语句

响应式规则
Assignment triggerscount += 1 触发更新;obj.x = 1 也会触发
Array mutation使用 arr = [...arr, item](重新赋值以触发更新)
$: declaration引用变量变化时自动重新计算
$: statement响应式地执行副作用
Props
声明与传递 Props

{greeting}, {name}!

展开 Props
事件
DOM 事件
value = e.target.value} />
事件修饰符
preventDefault调用 e.preventDefault()
stopPropagation阻止事件冒泡
once处理器只触发一次
self仅当 event.target 为该元素时触发
capture使用捕获阶段
组件事件
绑定
双向绑定
元素与组件绑定
绑定类型
bind:valueinput/select/textarea 值
bind:checked复选框状态
bind:group单选/复选框组
bind:thisDOM 元素引用
bind:clientWidth/Height只读元素尺寸
Store
可写 Store
// store.js import { writable } from "svelte/store"; export const count = writable(0); // Component — auto-subscribe with $
Store 方法
count.set(10); // set value count.update(n => n + 1); // update from current const unsub = count.subscribe(v => console.log(v));
Store 类型
writable(val)可读写 Store
readable(val, fn)只读,由 start 函数设置
derived(stores, fn)从其他 Store 派生计算
$store组件中的自动订阅语法
过渡动画
内置过渡
{#if visible}
Fades in/out
Fly in, fade out
{/if}
过渡选项
fade透明度 0 到 1
flyx/y 偏移 + 透明度动画
slide滑入/滑出(高度)
scale缩放并淡入淡出
drawSVG 路径描边动画
duration过渡时长(毫秒)
delay开始前的延迟
插槽
默认与具名插槽
Default header Default content

Title

Body content goes here

插槽 Props
{#each items as item} {/each}

{index}: {item.name}

Context
设置与获取 Context
Context vs Store
Context限定于组件树作用域,默认不响应式
Stores全局、响应式,可在任何地方导入
Context + Store通过 Context 传递 Store,实现作用域响应式
SvelteKit 基础
基于文件的路由
src/routes/ +page.svelte about/+page.svelte blog/[slug]/+page.svelte
Load 函数
// +page.js (runs on client & server) export async function load({ params, fetch }) { const res = await fetch(`/api/posts/${params.slug}`); return { post: await res.json() }; }
关键文件
+page.svelte页面组件
+page.js / +page.ts客户端/通用 load 函数
+page.server.js仅服务端 load / 表单 action
+layout.svelte共享布局包装器
+error.svelte错误页面
+server.jsAPI 端点(GET、POST 等)