菜单

组件特性

相关源文件

此页面概述了 Svelte 组件可用的核心功能。它解释了组件如何与用户交互、管理数据以及与其他组件集成所需的基本功能和 API 模式。有关属性和绑定的具体详情,请参阅 属性和绑定,有关事件处理,请参阅 事件和事件处理,有关动画功能,请参阅 过渡和动画

组件架构

Svelte 组件是 Svelte 应用程序的构建块。每个组件都将标记、样式和行为封装在单个文件中。在 Svelte 5 中,组件是接受 props 并返回包含导出和可能的生命周期方法的结构化对象的 JavaScript 函数。

组件结构概述

来源

组件实例化和挂载

在 Svelte 5 中,组件是函数,而不是类(如 Svelte 4 中)。这两种模型之间的过渡在类型系统中有所体现。

来源

组件 API

在 Svelte 5 中,组件使用 mounthydrate 函数进行实例化。

mount 函数将组件附加到 DOM,而 hydrate 在服务器端渲染场景中重用现有的 DOM 节点。unmount 函数则会从 DOM 中移除组件。

来源

组件类型系统

Svelte 提供了 TypeScript 接口,使得组件可以进行强类型定义。

此类型定义允许在将 props 传递给组件和使用它们提供的导出时实现类型安全。

来源

Props 和状态

组件通过 props 接收输入数据,并通过状态维护内部数据。

Props

Props 是从父组件传递到子组件的值。

来源

响应式状态

Svelte 5 引入了“runes”来管理状态。

来源

组件指令

Svelte 组件支持多种增强其功能的指令。

指令类型

来源

绑定指令

bind: 指令在 DOM 元素属性和组件变量之间创建双向数据绑定。

来源

事件处理

Svelte 中的事件处理使用 `on:` 指令。

可以使用 `preventDefault`、`stopPropagation` 和 `once` 等事件修饰符。

来源

Action 指令

use: 指令将 actions(JavaScript 函数)应用于 DOM 元素。

Actions 可以带有参数,并返回一个包含 `update` 和 `destroy` 方法的对象。

来源

样式和类指令

style: 和 `class:` 指令允许进行动态样式设置。

这些指令提供了一种方便的方式来应用条件样式和类。

来源

内容投射

Svelte 提供了将父组件的内容投射到子组件的机制。

Slots

Slots 允许组件接受并渲染其父组件的内容。

来源

Snippets

Svelte 5 引入了 snippets,作为 slots 的更灵活替代方案。

Snippet 可以接受参数,并可以使用 {@render ...} 标签进行条件渲染。

来源

特殊元素

Svelte 提供了可以为组件添加功能的特殊元素。

Svelte:带前缀的元素

来源

元素用法

特殊元素提供了各种能力

  • <svelte:component this={component}> - 动态渲染组件
  • <svelte:element this={tag}> - 动态渲染 HTML 元素
  • <svelte:self> - 递归渲染当前组件
  • <svelte:window on:resize={handleResize}/> - 为 window 添加事件监听器
  • <svelte:head> - 将内容放在 document 的 head 中

来源

生命周期方法

Svelte 组件具有生命周期方法,允许在特定时间运行代码。

生命周期钩子

来源

关键的生命周期钩子有

  • onMount(callback) - 组件首次渲染到 DOM 后运行
  • onDestroy(callback) - 组件卸载时运行
  • $effect(callback) - 当响应式依赖项更改时运行
  • $effect.pre(callback) - 在状态更改应用于 DOM 之前运行

来源

上下文 API

Svelte 提供了上下文 API,用于在组件之间共享数据,无需使用 props。

上下文方法

上下文 API 包括

  • setContext(key, context) - 设置上下文值
  • getContext(key) - 获取上下文值
  • hasContext(key) - 检查上下文是否存在
  • getAllContexts() - 获取所有上下文值

来源

自定义元素

Svelte 可以将组件编译为自定义元素(Web Components)。

自定义元素配置

可以使用 customElement 编译器选项将组件编译为自定义元素。

来源

自定义元素随后可在 HTML 或其他框架中使用

来源

块语法

Svelte 在模板中为控制流提供了特殊的块语法。

关键块语句

来源

块用法

这些块在模板中提供控制流

  • {#if ...} - 条件渲染
  • {#each ...} - 列表渲染
  • {#await ...} - 异步数据处理
  • {#key ...} - 当 key 更改时强制重新创建元素
  • {#snippet ...} - 定义可重用的模板片段

来源

总结

Svelte 组件提供了一系列丰富的特性,用于构建交互式 Web 应用程序。

  1. 组件 API - 创建、挂载和卸载组件
  2. Props 和 State - 将数据传递给组件并管理内部状态
  3. 组件指令 - 绑定数据、处理事件、应用 action 和样式化元素
  4. 内容投影 - 使用 slot 和 snippet 来组合组件内容
  5. 特殊元素 - 使用特殊功能增强组件
  6. 生命周期方法 - 响应组件的创建和销毁
  7. 上下文 API - 在组件之间共享数据,无需 props
  8. 自定义元素 - 创建 Web Components
  9. 块语法 - 模板中的控制流

这些特性与 Svelte 的响应式系统紧密集成,提供了强大且符合人体工程学的 UI 构建方式。

来源