【前端】Svelte:核心语法和组件基础

devtools/2024/11/13 9:38:55/

本教程将详细介绍 Svelte 的核心语法和组件基础,包括 <script><style> 和 HTML 模板的使用方法。我们将通过实例掌握双向数据绑定、条件渲染、循环等基本语法,最后编写简单的交互式组件。

Svelte 组件机制

Svelte 使用组件化结构来组织代码。每个 .svelte 文件就是一个组件,包含 <script><style> 和 HTML 模板块,分别用于编写 JavaScript 逻辑、CSS 样式和 HTML 结构。组件之间的逻辑与样式是分离的,但每个组件的 CSS 默认作用于组件自身。

组件文件结构

每个 .svelte 文件由以下三个主要部分组成:

  • <script>:编写 JavaScript 逻辑,包括定义变量、函数、导入模块等。
  • <style>:编写组件的 CSS 样式。Svelte 会将样式作用域限定在当前组件,不会影响全局样式。
  • HTML 模板:用于描述组件的 HTML 结构。可以在模板中插入变量、条件渲染、循环等。
<!-- App.svelte -->
<script>let name = 'Svelte';
</script><style>h1 {color: #ff3e00;}
</style><main><h1>Hello {name}!</h1>
</main>

在这个示例中,组件会显示一个 “Hello Svelte!” 标题,并将标题颜色设置为橙色。

基础语法和数据绑定

单向数据绑定

Svelte 提供了简单的绑定机制,只需在 HTML 中插入 {} 即可将变量绑定到视图。通过单向绑定,视图会随变量的更新而自动刷新。

<script>let count = 0;
</script><button on:click={() => count += 1}>Clicked {count} times
</button>

每次点击按钮,count 会增加 1,视图会自动更新显示点击次数。

双向数据绑定

Svelte 提供了 bind: 语法用于实现双向数据绑定。可以将输入框的内容和变量绑定,使输入的内容实时更新到变量中。

<script>let name = '';
</script><input bind:value={name} placeholder="Enter your name" />
<p>Your name is {name}</p>

在这个示例中,每当输入框内容变化时,name 变量会自动更新,且会实时显示在段落中。

条件渲染和循环渲染

条件渲染({#if ...}

Svelte 支持使用 {#if} 块进行条件渲染。可以根据条件动态显示或隐藏某些内容。

<script>let isLoggedIn = false;function toggleLogin() {isLoggedIn = !isLoggedIn;}
</script><button on:click={toggleLogin}>{#if isLoggedIn}Logout{:else}Login{/if}
</button>
<p>{isLoggedIn ? "Welcome back!" : "Please log in."}</p>

这里通过点击按钮改变 isLoggedIn 的状态,以动态显示 “Login” 或 “Logout” 文案。

循环渲染({#each ...}

Svelte 的 {#each} 块可以遍历数组并渲染每一项。适用于动态展示列表。

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

上面的代码会生成一个列表,每个水果名都将显示在一个 li 元素中。

事件绑定和交互式组件

事件绑定

Svelte 提供了简洁的事件绑定语法,通过 on: 指令可以轻松绑定事件。

<script>let message = '';function handleClick() {message = 'Button clicked!';}
</script><button on:click={handleClick}>Click me</button>
<p>{message}</p>

在这个示例中,点击按钮后,message 的内容会更新为 “Button clicked!”。

双向绑定的输入组件

使用 bind: 实现输入框的双向绑定,可以创建一个交互式输入组件。

<script>let username = '';
</script><input bind:value={username} placeholder="Enter your username" />
<p>Hello, {username || 'Guest'}!</p>

当用户在输入框中键入时,username 变量实时更新,页面上的文本也会动态改变。

简单的交互式组件示例

我们可以利用以上语法,编写一个包含按钮和输入框的交互式组件,让用户可以输入信息并点击按钮来更新显示内容。

<script>let name = '';let greeting = '';function greet() {greeting = `Hello, ${name}!`;}
</script><style>button {margin-top: 10px;padding: 5px 10px;background-color: #6200ea;color: #fff;border: none;border-radius: 3px;cursor: pointer;}
</style><input bind:value={name} placeholder="Enter your name" />
<button on:click={greet}>Greet</button>
<p>{greeting}</p>

在这个示例中:

  1. 输入框通过 bind:value 实现双向数据绑定。
  2. 点击按钮后触发 greet 函数,更新 greeting 文本并显示。

通过该交互组件,用户可以输入名称并点击按钮,页面会显示相应的问候信息。

总结

在本教程中,我们学习了 Svelte 的组件机制、单向和双向数据绑定、条件渲染和循环渲染,还编写了简单的交互式组件。通过这些基础语法和功能,已经可以构建动态的交互界面。掌握这些内容之后,您可以进一步学习 Svelte 的 Store 状态管理、路由等高级特性,创建更复杂的应用。


http://www.ppmy.cn/devtools/132869.html

相关文章

Chromium127编译指南 Mac篇(二)- 安装Xcode

1. 概述 在Chromium开发的道路上&#xff0c;为Mac平台搭建正确的环境是至关重要的第一步。本文将聚焦于Xcode的安装过程&#xff0c;它作为Mac上不可或缺的开发工具&#xff0c;为Chromium的编译提供了必要的编译器和工具链。 我们将详细解析如何选择、下载并安装适合Chromium…

springboot系列--web相关知识探索七

一、前言 web相关知识探索六中研究了接口数据响应与简单的内容协商的底层原理。本次主要是探索一下内容协商的底层原理。 二、内容协商 一、什么是内容协商 根据客户端接收能力不同&#xff0c;返回不同媒体类型的数据。 二、内容协商过程演示 一、问题 在项目开发中&#xf…

全排列(DFS)

给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2&#xff1a; 输入&#xff1a;nums …

unity实习生面试

北京教育中厂的成都分部 11.5 时长有28分钟 一面二面合并了 面试官人挺好的&#xff0c;也不是特别急&#xff0c;答的不是很好的问题面试官直接跳过了 顺序不是很统一 只写记得的部分 1.问了值类型和引用类型的区别 2. 问了ugui的组件有哪些 ugui有哪些优化方案 答用打图集…

软件测试(系统测试)的定位和专业:完善产品;专业;非助手;自动化

软件测试&#xff08;系统测试&#xff09;的定位 在研发流程的后端&#xff0c;测试并非无中生有的创举&#xff0c;而是从既有基础&#xff08;即“1”&#xff09;出发&#xff0c;致力于推动产品向更高层次&#xff08;即从“1”到“100”&#xff09;的跃升与完善。在这一…

Uniapp底部导航栏设置(附带PS填充图标教程)

首先需要注册和登录ifconfont官网&#xff0c;然后创建项目添加需要的图标 创建和添加图标库请参考&#xff1a;Uniapp在Vue环境中引入iconfont图标库&#xff08;详细教程&#xff09; 打开iconfont官网&#xff0c;找到之前添加的图标库&#xff0c;下载png图片 如果需要的…

深度学习——前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法概要汇总

文章目录 &#x1f33a;深度学习面试八股汇总&#x1f33a;前向传播与反向传播前向传播&#xff08;Forward Propagation&#xff09;反向传播&#xff08;Back Propagation&#xff09;总结 神经网络简介结构类型前馈神经网络&#xff08;Feedforward Neural Network, FFNN&am…

【JWT】Asp.Net Core中JWT刷新Token解决方案

Asp.Net Core中JWT刷新Token解决方案 前言方案一:当我们操作某个需要token作为请求头的接口时,返回的数据错误error.response.status === 401,说明我们的token已经过期了。方案二:实现用户无感知的刷新token值,我们希望当响应返回的数据是401身份过期时,响应阻拦器自动帮我…