Svelte.js 入门指南

引言

在前端开发领域,Svelte.js 以其独特的编译时优化和简洁的语法,迅速成为开发者关注的焦点。与 React、Vue.js 等传统框架不同,Svelte 在构建阶段将组件代码编译为高效的原生 JavaScript 代码,从而减少运行时的开销。本文将重点介绍 Svelte 的核心用法,帮助你快速上手并体验其魅力。


1. 安装与初始化

(1) 安装 Svelte

使用以下命令创建一个新的 Svelte 项目:

npx degit sveltejs/template my-svelte-project
cd my-svelte-project
npm install

(2) 启动开发服务器

npm run dev

打开浏览器访问 http://localhost:5000,即可看到默认的 Svelte 应用。


2. 组件基础

(1) 组件结构

一个 Svelte 组件由三部分组成:

  • <script>:JavaScript 逻辑。
  • <style>:CSS 样式(默认作用域为当前组件)。
  • HTML 模板。

示例:

<script>
  let name = 'Svelte';
</script>
 
<style>
  h1 {
    color: #ff3e00;
  }
</style>
 
<h1>Hello {name}!</h1>

(2) 响应式数据

Svelte 的响应式系统非常直观,只需使用 $: 标记即可实现响应式变量。

示例:

<script>
  let count = 0;
 
  $: doubled = count * 2;
</script>
 
<button on:click={() => count += 1}>
  点击次数:{count},双倍:{doubled}
</button>

3. 事件绑定

(1) 绑定 DOM 事件

使用 on: 指令绑定 DOM 事件。

示例:

<script>
  let count = 0;
 
  function increment() {
    count += 1;
  }
</script>
 
<button on:click={increment}>
  点击次数:{count}
</button>

(2) 事件修饰符

Svelte 支持事件修饰符,如 preventDefaultstopPropagation 等。

示例:

<button on:click|preventDefault={increment}>
  点击我(阻止默认行为)
</button>

4. 状态管理

(1) 组件内状态

在组件内直接声明变量即可管理状态。

示例:

<script>
  let name = 'Svelte';
</script>
 
<input bind:value={name} />
<p>Hello, {name}!</p>

(2) 全局状态(Store)

Svelte 提供了 writablereadablederived 等 API 来管理全局状态。

示例:

<script>
  import { writable } from 'svelte/store';
 
  const count = writable(0);
 
  function increment() {
    count.update(n => n + 1);
  }
</script>
 
<button on:click={increment}>
  点击次数:{$count}
</button>

5. 条件与循环

(1) 条件渲染

使用 {#if} 实现条件渲染。

示例:

<script>
  let isLoggedIn = false;
</script>
 
{#if isLoggedIn}
  <p>欢迎回来!</p>
{:else}
  <p>请登录。</p>
{/if}

(2) 循环渲染

使用 {#each} 实现循环渲染。

示例:

<script>
  let items = ['Apple', 'Banana', 'Cherry'];
</script>
 
<ul>
  {#each items as item}
    <li>{item}</li>
  {/each}
</ul>

6. 生命周期

Svelte 提供了以下生命周期函数:

  • onMount:组件挂载时执行。
  • onDestroy:组件销毁时执行。
  • beforeUpdateafterUpdate:组件更新前后执行。

示例:

<script>
  import { onMount } from 'svelte';
 
  onMount(() => {
    console.log('组件已挂载');
  });
</script>

7. 动画与过渡

Svelte 内置了强大的动画和过渡支持,使用 transitionanimate 指令即可实现。

示例:

<script>
  import { fade } from 'svelte/transition';
  let visible = true;
</script>
 
<button on:click={() => visible = !visible}>
  切换显示
</button>
 
{#if visible}
  <p transition:fade>这是一个淡入淡出的效果</p>
{/if}

8. 组件通信

(1) Props

父组件通过 export 关键字向子组件传递数据。

父组件:

<script>
  import Child from './Child.svelte';
  let message = 'Hello from Parent';
</script>
 
<Child {message} />

子组件:

<script>
  export let message;
</script>
 
<p>{message}</p>

(2) 事件派发

子组件通过 createEventDispatcher 向父组件派发事件。

子组件:

<script>
  import { createEventDispatcher } from 'svelte';
  const dispatch = createEventDispatcher();
 
  function notify() {
    dispatch('notify', { detail: 'Hello from Child' });
  }
</script>
 
<button on:click={notify}>通知父组件</button>

父组件:

<script>
  import Child from './Child.svelte';
 
  function handleNotify(event) {
    alert(event.detail);
  }
</script>
 
<Child on:notify={handleNotify} />

9. 进阶用法

(1) SvelteKit

SvelteKit 是 Svelte 的官方框架,支持路由、服务端渲染(SSR)、静态站点生成(SSG)等功能。

(2) 第三方库

Svelte 社区提供了丰富的第三方库,如:

  • Svelte Material UI:Material Design 组件库。
  • Svelte Router:轻量级路由库。

结语

Svelte.js 以其简洁的语法和高效的性能,正在成为前端开发的重要选择。通过本文的介绍,你应该已经掌握了 Svelte 的核心用法。如果你还没有尝试过 Svelte,不妨从一个小项目开始,体验它的魅力!


参考链接:

希望这篇博客能帮助你快速上手 Svelte.js!如果你有任何问题或想法,欢迎在评论区分享!