[svelte]基础知识+反应性能力

2024-04-16 20:52

本文主要是介绍[svelte]基础知识+反应性能力,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

来源:Svelte 中文文档 | Svelte 中文网

之前不是在学html,css嘛,JavaScript有点多,还没整理完,因为svelte紧急!现在就需要了

svelte前提先对html,css,JavaScript有基本的了解


什么是Svelte?

Svelte 是一个构建 web 应用程序的工具。

Svelte 与诸如 React 和 Vue 等 JavaScript 框架类似,都怀揣着一颗让构建交互式用户界面变得更容易的心。

但是有一个关键的区别:Svelte 在 构建/编译阶段 将你的应用程序转换为理想的 JavaScript 应用,而不是在运行时进行虚拟DOM操作。这意味着你不需要为框架所消耗的性能付出成本,并且在应用程序首次加载时没有额外损失。

你可以使用 Svelte 构建整个应用程序,也可以逐步将其融合到现有的代码中。你还可以将组件作为独立的包(package)交付到任何地方,并且不会有传统框架所带来的额外开销。

在传统的前端框架中,比如React和Vue,页面上的每个组件都有一个虚拟 DOM 对象与之对应。虚拟 DOM 是一个虚拟的、内存中的 DOM 树,它是对真实 DOM 的一种轻量级映射。当组件状态发生变化时,框架会通过比较新旧虚拟 DOM 来计算出需要更新的部分,然后将这些变化应用到真实的 DOM 上,从而更新页面的显示。

而在 Svelte 中,不存在虚拟 DOM。相反,Svelte 在编译阶段会分析组件的代码,并生成对应的 JavaScript 代码,这些代码会直接操作 DOM,而不是通过虚拟 DOM。换句话说,Svelte 在构建应用程序时,会把页面更新的逻辑直接写入最终的 JavaScript 代码中,而不是在运行时动态生成。

这种直接操作 DOM 的方式使得 Svelte 在性能上有很大的优势,因为它避免了虚拟 DOM 的性能开销,并且减少了在页面更新时的计算量。这也意味着 Svelte 生成的代码更加轻量级,加载和执行速度更快,从而提高了应用程序的性能和响应速度。


动态变量

要想显示hello world很简单,就直接加一个标签就好了

<h1>Hello world!</h1>

但我们可以向组件里面添加<script>标签来声明一个name变量,然后就可以在下面的标签引用name变量了:

<script>let name = 'world';
</script><h1>Hello {name}!</h1>

在花括号内,我们可以放置任何我们想要的 JavaScript 代码。可以把 name 改为 name.toUpperCase() 【变成大写】

同样的,就像使用花括号可以控制文本,花括号也可以控制元素属性

<script>let src = 'tutorial/image.gif';let name = 'Rick Astley';
</script><img {src} alt="{name} dances.">

CSS样式

就像在 HTML 中一样,可以向组件添加一个 <style> 标签,来美化

<style>p {color: purple;font-family: 'Comic Sans MS', cursive;font-size: 2em;}
</style><p>This is a paragraph.</p>

整个应用程序放在一个组件中是不切实际的。相反,我们可以从其他文件导入组件并包含它们,就好像我们包含 HTML 元素一样。

app.svelte

<script>import Nested from './Nested.svelte'; //从Nested.svelte导入标签
</script><style>p {color: purple;font-family: 'Comic Sans MS', cursive;font-size: 2em;}
</style><p>This is a paragraph.</p>
<Nested/>

Nested.svelte

<p>This is another paragraph.</p>

尽管 Nested.svelte 有一个 <p> 元素,但 App.svelte 中的样式是不会溢出的(也就是不会影响 Nested.svelte 中的 <p> 元素)。 还需要注意的是,组件名称 Nested 的首字母大写。采用此约定是为了使我们能够区分用户自定义的组件和一般的 HTML 标签。


HTML标签

通常,字符串以纯文本形式插入,这意味着像 < 和 > 这样的字符没有特殊的含义。

但有时需要将 HTML 直接绘制到组件中。在 Svelte 中,你可以使用特殊标记 {@html ...} 实现:

<script>let string = `this string contains some <strong>HTML!!!</strong>`;
</script><p>{@html string}</p>

在将表达式的输出插入到 DOM 之前,Svelte 不会对 {@html ...} 内的表达式的输出做任何清理的。换言之,如果使用此功能,则必须手动转义来自不信任源的 HTML 代码,否则会使用户面临 XSS 攻击的风险。


反应性能力

Svelete 的内核是一个强大的 (反应性)reactivity 系统,能够让 DOM 与你的应用程序状态保持同步

比如说事件响应,可以在button标签中添加一个事件处理器,

<button on:click={handleClick}>

在script中增加一个响应函数,最后也就是这样子

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

Svelte 其实是将此赋值语句替换为一些代码,这些代码将通知 Svelte 更新 DOM

当组件的状态改变时,Svelte 会自动更新 DOM。通常,组件状态的某些部分需要通过 其它 部分的计算而得出(例如 fullname 就是 firstname 和 lastname 的合体),并在 其它 部分更改时重新计算。

$:doubled=count*2

这是 Svelte 中的响应式声明语法。$: 表示一个响应式声明,它会在相关的响应式变量(这里是 count)发生变化时重新计算其后面的表达式。

<script>let count = 0;$: doubled = count * 2;function handleClick() {count += 1;}
</script><button on:click={handleClick}>Clicked {count} {count === 1 ? 'time' : 'times'}
</button><p>{count} doubled is {doubled}</p>

svelte不仅提供了声明反应式的值,还可以运行反应式的语句

<script>let count = 0;$: if (count >= 10) {alert(`count is dangerously high!`);count = 9;}function handleClick() {count += 1;}
</script><button on:click={handleClick}>Clicked {count} {count === 1 ? 'time' : 'times'}
</button>
更新数组和对象

由于 Svelte 的反应性是由赋值语句触发的,因此使用数组的诸如 push 和 splice 之类的方法就不会触发自动更新。例如,点击按钮就不会执行任何操作。

<script>let numbers = [1, 2, 3, 4];function addNumber() {numbers = [...numbers, numbers.length + 1];}$: sum = numbers.reduce((t, n) => t + n, 0);
</script><p>{numbers.join(' + ')} = {sum}</p><button on:click={addNumber}>Add a number
</button>

function addNumber()

{ numbers = [...numbers, numbers.length + 1]; }:

这是一个名为 addNumber 的函数,用于向数组 numbers 中添加一个新的数字。它通过将原始数组 numbers 展开成一个新的数组,然后在末尾添加一个新的数字,这个数字是数组长度加 1 来实现添加操作。

赋值给数组和对象的 属性(properties) (例如,obj.foo += 1 或 array[i] = x)与对值本身进行赋值的方式相同。

function addNumber() {numbers[numbers.length] = numbers.length + 1;
}

一个简单的经验法则是:被更新的变量的名称必须出现在赋值语句的左侧。例如下面这个:

const foo = obj.foo;
foo.bar = 'baz';

就不会更新对 obj.foo.bar 的引用,除非使用 obj = obj 方式。

这篇关于[svelte]基础知识+反应性能力的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/909872

相关文章

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

计组基础知识

操作系统的特征 并发共享虚拟异步 操作系统的功能 1、资源分配,资源回收硬件资源 CPU、内存、硬盘、I/O设备。2、为应⽤程序提供服务操作系统将硬件资源的操作封装起来,提供相对统⼀的接⼝(系统调⽤)供开发者调⽤。3、管理应⽤程序即控制进程的⽣命周期:进程开始时的环境配置和资源分配、进程结束后的资源回收、进程调度等。4、操作系统内核的功能(1)进程调度能⼒: 管理进程、线

EasyPlayer.js网页H5 Web js播放器能力合集

最近遇到一个需求,要求做一款播放器,发现能力上跟EasyPlayer.js基本一致,满足要求: 需求 功性能 分类 需求描述 功能 预览 分屏模式 单分屏(单屏/全屏) 多分屏(2*2) 多分屏(3*3) 多分屏(4*4) 播放控制 播放(单个或全部) 暂停(暂停时展示最后一帧画面) 停止(单个或全部) 声音控制(开关/音量调节) 主辅码流切换 辅助功能 屏

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel

java常用面试题-基础知识分享

什么是Java? Java是一种高级编程语言,旨在提供跨平台的解决方案。它是一种面向对象的语言,具有简单、结构化、可移植、可靠、安全等特点。 Java的主要特点是什么? Java的主要特点包括: 简单性:Java的语法相对简单,易于学习和使用。面向对象:Java是一种完全面向对象的语言,支持封装、继承和多态。跨平台性:Java的程序可以在不同的操作系统上运行,称为"Write once,

关于回调函数和钩子函数基础知识的整理

回调函数:Callback Function 什么是回调函数? 首先做一个形象的比喻:   你有一个任务,但是有一部分你不会做,或者说不愿做,所以我来帮你做这部分,你做你其它的任务工作或者等着我的消息,但是当我完成的时候我要通知你我做好了,你可以用了,我怎么通知你呢?你给我一部手机,让我做完后给你打电话,我就打给你了,你拿到我的成果加到你的工作中,继续完成其它的工作.这就叫回叫,手机

有关机械硬盘的基础知识

1,机械硬盘的品牌   目前市场中常见的笔记本电脑的机械硬盘品牌主要有希捷、西部数据、三星等。   2,机械硬盘的容量   硬盘容量,即硬盘所能存储的最大数据量。虽然笔记本电脑硬盘的容量会因单位密度的提升而增加,不过和台式电脑的大容量比起来,笔记本电脑硬盘的容量仍然落后许多。笔记本电脑的硬盘除了对磁盘有体积较小和数量较少的要求之外,对功耗、耐用程度、抗震性及成本等的考虑,也让笔记

OpenGL ES学习总结:基础知识简介

什么是OpenGL ES? OpenGL ES (为OpenGL for Embedded System的缩写) 为适用于嵌入式系统的一个免费二维和三维图形库。 为桌面版本OpenGL 的一个子集。 OpenGL ES管道(Pipeline) OpenGL ES 1.x 的工序是固定的,称为Fix-Function Pipeline,可以想象一个带有很多控制开关的机器,尽管加工

计算机基础知识复习9.6

点对点链路:两个相邻节点通过一个链路相连,没有第三者 应用:PPP协议,常用于广域网 广播式链路:所有主机共享通信介质 应用:早期的总线以太网,无线局域网,常用于局域网 典型拓扑结构:总线型 星型(逻辑总线型) 介质访问控制  静态划分信道 信道划分介质访问控制 频分多路复用FDM 时分多路复用TDM 波分多路复用WDM 码分多路复用CDM 动态分配信道 轮询访问介质访问控

Gitflow基础知识

0.理想状态 现状 听完后的理想状态 没使用过 git 知道 git 是什么,会用 git 基础流程命令 用过 git,但只通过图形化界面操作 脱离图形化界面操作,通过 git 命令操作 会 git 命令 掌握 gitflow 规范,合理使用 rebase 和解决代码冲突问题 1.Git 的基础流程&命令 1.1 基础概念 工作区:代码生产基地,pycharm