当前位置: 首页 > Web前端 > JavaScript

Svelte框架介绍

时间:2023-03-27 11:39:51 JavaScript

...一、Svelte简介Svelte是一个新兴的流行前端框架。作者是里奇·哈里斯,这也是一个编译器。在《State of JS survey of 2020》报告中,预测它是一种新兴技术,可能会在未来十年内取代其他框架,如React和Vue。在开源托管网站Github上,Svelte也获得了超过61k的关注,仅次于明星框架React和Vue。2.Svelte的优势其实,作为一个前端框架,Svelte在语法和用户体验上并没有什么特别之处。真正不同的是Svelte对前端AOT(ahead-of-time,可以理解为预编译)的探索。如果你对React和Vue的设计思想有更深入的了解,就会知道它们必须为虚拟dom和diff算法引入运行时(runtime)代码。Svelte的设计思路是【通过静态编译,即预编译,减少框架运行时的代码量】。Svelted完全集成到JavaScript中,应用程序所需的所有运行时代码都包含在bundle.js中,因此无需引入额外的Runtime。React和Vue都是基于运行时的框架。当用户操作页面进行各种操作改变组件的状态时,框架的运行时会根据组件状态(state)计算(diff)哪些DOM节点需要更新,从而更新view。这意味着运行时框架本身所依赖的代码也将被打包到最终的构建产品中,导致打包后的体积不可避免地增加。3.Svelte的缺点作为一个还处于起步阶段的框架,Svelte还是有很多缺点的。如果用于大型商业项目,需要特别小心。4.快速入门4.1创建项目与其他前端框架一样,创建Svelte项目非常简单,命令如下。npmcreatesvelte@latestmy-appcdmy-appnpminstallnpmrundev然后在浏览器中打开http://localhost:5173/访问对应的页面,运行效果如下图。如果需要修改端口号,可以打开package.json文件,然后在启动命令中修改环境变量PORT。"scripts":{"dev":"PORT=4000rollup-c-w",},4.2lessconfiguration创建Svelte项目时,模板本身不携带任何插件。如果需要在Svelte组件中少写一些,需要安装相关的依赖。npminstallsvelte-preprocess-lessless然后在rollup.config.js中添加相关配置,如果没有rollup.config.js文件,可以新建一个。从“svelte-preprocess”导入sveltePreprocess;import{lessassvelteLess}from'svelte-preprocess-less';exportdefault{plugins:[svelte({preprocess:sveltePreprocess({style:svelteLess(),}),}),],};接下来我们可以在组件中使用...由html、css和js代码组成,类似于vue。其中,当属性名和变量名是同样,我们也可以简单地省略变量名。风格与其他写作方法相同。但是上面说的例子都是简单的小组件。对于一个完整的应用程序,它必须由多个组件组成。和其他框架一样,使用的时候需要导入。不同的是import需要写在

5.2Responsive响应式也是核心特性之一苗条的。可以直接在js中修改绑定变量,在DOM上可以同步看到数据变化。点击了{count}{count===1?'time':'times'}类似于vue中的computed,这里叫作[reactivedeclaration],这样写:letcount=0;$:加倍=计数*2;然后,您可以在公共图像中使用doubled,例如count。Svelet的响应性是由赋值语句触发的,因此数组的push和splice等操作不会触发更新。例如,正确的方法是手动添加一个看似多余的赋值语句。

{numbers.join('+')}={sum}

添加一个数5.3属性传递在前端框架中,值传递组件之间一般使用构造函数。在Svelte中,组件之间的传值也比较简单,但是需要使用export关键字在子组件中传值出去。//子组件使用export导出

答案是{answer}

5.4逻辑语句与其他框架不同,Svelte逻辑语句需要用HTML处理,比如{#ifxxxxx},语法不是很友好。{#ifuser.loggedIn}注销{/if}if-else的写法如下。{#ifx>10}

{x}大于10

{:else如果5>x}

{x}小于5

{:else}

{x}在5到10之间

{/if}其中#表示块逻辑的开始,/表示结束,:表示继续。如果要循环,一般使用for/each。然而,Svelte的循环语句实在让人难以接受。

YouTube上的名猫

    {#eachcatsascat,index}
  • {index+1}{cat.name}
  • {/each}
5.5事件与其他框架一样,Svelte提供了on:click、on:mousemove等指令来监听事件。(count+=1)}aria-label="将计数器增加一个">当然监听事件的时候也可以使用事件修饰符,用'|'分隔表示可以连续使用倍数。on:click|once|capture={handleEvent}需要特别注意的一点是,如果子组件要接受父组件的点击事件,只需要在子组件内部加上on:click即可。//父组件//子组件点我5.6事件绑定Svelte中的数据绑定类似于Vue和React,使用bind:value方法进行绑定。例如,下面是输入标签的事件绑定。

Hello{name}!

上面是单个值的绑定,接下来绑定多个值什么时候,你可以使用bind:group把值放在一起。并且,bind:this可以绑定任何标签或者组件,并且可以获取标签的引用,类似于React的ref.onMount(()=>{constctx=canvas.getContext('2d');.....}组件属性它也可以绑定,比如在父组件中引用子组件的属性不过作为年轻的前端框架,很少见看到一些互联网公司将Svelte应用到生产中的原因不外乎以下几点:对低端手机不是很友好,尤其是shadow等高级功能,生态不是很完善,配套安全、性能测试、自动化等工具,不是很完善,全新的语法需要一定的学习成本。