脚手架

Vite:vite是集成了svelte,初始化的时候选择svelte就行了。

npm init vite

SvelteKit:底层基于vite的更上层框架,类似于nextjs。

npm create svelte@latest my-app
cd my-app
npm install
npm run dev

.svelte文件结构

和vue类似svelte文件是.svelte结尾的文件,比如demo.svelte。代码结构:

<script>
let name = 'hello world';
</script> <div class="name">
{name}
</div> <style>
.name {
color: red;
}
</style>

模版绑定

绑定变量

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

绑定属性

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

绑定事件

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

$:类似于vue的computed。例如:

<script>
let count = 0;
// 定义一个名字叫doubled的变量,当count的值改变时,doubled会改变。doubled变量时响应式的。
$: doubled = count * 2;
// 直接这样写d2不是响应式的。
let d2 = count * 2; $: if (count >= 10) {
alert('count is dangerously high!');
count = 9;
} $: {
console.log('the count is ' + count);
alert('I SAID THE COUNT IS ' + count);
} function handleClick() {
count += 1;
}
</script> <button on:click={handleClick}>
Clicked {count} {count === 1 ? 'time' : 'times'}
</button> <p>{count} doubled is {doubled}</p>
<p>
t2 is {d2}
</p>

为什么d2变量不是响应式的,我们会在 svelte响应式原理里面解释。

if/else

	  <script>
let user = { loggedIn: false }; function toggle() {
user.loggedIn = !user.loggedIn;
}
</script> <div>
{#if user.loggedIn}
<button on:click={toggle}>
Log out
</button>
{:else}
<button on:click={toggle}>
Log in
</button>
{/if}
</div>

each遍历

<script>
let cats = [
{ id: 'J---aiyznGQ', name: 'Keyboard Cat' },
{ id: 'z_AbfPXTKms', name: 'Maru' },
{ id: 'OUtn3pvWmpg', name: 'Henri The Existential Cat' }
];
</script> <h1>The Famous Cats of YouTube</h1> <ul>
{#each cats as { id, name }, i}
<li><a target="_blank" href="https://www.youtube.com/watch?v={id}" rel="noreferrer">
{i + 1}: {name}
</a></li>
{/each}
</ul>

await

<script>
async function getRandomNumber() {
const res = await fetch(`/tutorial/random-number`);
const text = await res.text(); if (res.ok) {
return {val: text};
} else {
throw new Error(text);
}
} let promise = getRandomNumber(); function handleClick() {
promise = getRandomNumber();
}
</script> <button on:click={handleClick}>
generate random number
</button> {#await promise}
<p>...waiting</p>
{:then res}
<p>The number is {res.val}</p>
{:catch error}
<p style="color: red">{error.message}</p>
{/await}

双向数据流

<script>
let name = 'world';
$:
</script> <input bind:value={name}> <h1>Hello {name}!</h1>

组件

使用子组件和父子组件通信

App.svelte

<script lang="ts">
import Child from './child.svelte'; var num = 1;
var obj = {
count: 1
} function handleAdd() {
num = num + 1;
obj.count = obj.count + 1;
} function handleReset(event) {
num = event.detail.val;
obj.count = event.detail.val;
}
</script> <div>
我是父组件
<button on:click={handleAdd}>add num</button>
// 也支持...的语法
<Child count={num} on:reset={handleReset} />
<Child {...obj} on:reset={handleReset} />
</div>

Child.svelte

<script>
import { createEventDispatcher } from 'svelte';
export let count; const dispatch = createEventDispatcher(); function handleReset() {
dispatch('reset', {
val: 0
});
}
</script> <div>
<p>我是子组件,count is {count}</p>
<button on:click={handleReset}>reset count</button>
</div>

组件中使用双向数据流

App.svelte

<script>
import Child from './child.svelte'; var name;
</script> <p>
name is {name}
</p>
<Child bind:name />

Child.svelte

<script>
export let name;
</script> <div>
<input bind:value={name} />
</div>

插槽

App.svelte

<script>
import Child from './child.svelte';
</script> <Child>
<p>i am from App</p>
<p slot="tool">i am tool</p>
</Child>

Child.svelte

<div>
<slot />
<slot name="tool" />
</div>

生命周期

onMount、onDestroy、beforeUpdate、afterUpdate

<script>
import { onMount, onDestroy, beforeUpdate, afterUpdate } from 'svelte'; onMount(() => {
//...
}); onDestroy(() => {
//...
}); beforeUpdate(() => {
//...
}); afterUpdate(() => {
//...
});
</script> <h1>Photo album</h1>

svelte的一些基础demo的更多相关文章

  1. Qwt开发笔记(一):Qwt简介、下载以及基础demo工程模板

    前言   QWT开发笔记系列整理集合,这是目前使用最为广泛的Qt图表类(Qt的QWidget代码方向只有QtCharts,Qwt,QCustomPlot),使用多年,系统性的整理,本系列旨在系统解说并 ...

  2. node-webkit 环境搭建与基础demo

    首先去github上面下载(地址),具体更具自己的系统,我的是windows,这里只给出windows的做法 下载windows x64版本 下载之后解压,得到以下东西 为了方便,我们直接在这个目录中 ...

  3. [spring security] spring security 4 基础Demo

    依赖包: <properties> <junit.version>4.11</junit.version> <spring.version>4.1.6. ...

  4. iOS开发-UI基础Demo

    现在更多的学习资料都是xCode4.X的,发现xCode6.1还是很多东西,如果有正在学习iOS开发的可以通过Demo简单了解下iOS的UI开发~ 1.新建单视图文件: 2.新建项目名称,语言选择OC ...

  5. ios socket(基础demo)

    http://blog.sina.com.cn/s/blog_7a2f0a830101ecv4.html clinetSocket 1.viewcontroller.h @interface View ...

  6. [jquery] jQuery jsTree V3.2.1 基础Demo

    引入对应的文件: <link rel="stylesheet" href="../dist/themes/default/style.min.css" / ...

  7. Sencha 基础Demo测试,三种showView的方法

    直接贴代码吧 Ext.define("build.controller.MainController",{ extend:"Ext.app.Controller" ...

  8. webpack学习(二):先写几个webpack基础demo

    一.先写一个简单demo1 1-1安装好webpack后创建这样一个目录: 1-2:向src各文件和dist/index.html文件写入内容: <!DOCTYPE html> <h ...

  9. java多线程 基础demo

    join()   让主进程等待子进程全部执行完 例子如下:   package mocker; public class TestThread5 extends Thread {      priva ...

  10. Groovy语言学习--语法基础(4)

    语法基础到此就结束了,毕竟其和Java许多地方并无差别.groovy作为脚本,是为了能更好地随业务变化调整规则,我根据自己对规则的理解 通过一张图简单描述一个groovy脚本场景:由于货币膨胀,经济收 ...

随机推荐

  1. 文盘Rust——起手式,CLI程序

    技术的学习从不会到会的过程是最有意思的,也是体会最多的.一旦熟练了,知识变成了常识,可能就失去了记录学习过程的最佳时机. 在我看来学习一门计算机语言和学习人类语言有很多共通之处.我们学习人类语言是从单 ...

  2. Scrapy官方文档爬取

    最近想爬点啥东西看看, 所以接着学习了一点Scrapy, 学习过程中就试着去爬取Scrapy的官方文档作为练习之用, 现在已经基本完成了. 实现原理: 以 overview.html 为起点,通过 r ...

  3. 宏观上理解blazor中的表单验证

    概述 表单验证的最终效果大家都懂,这里不阐述了,主要从宏观角度说说blazor中表单验证框架涉及到的类,以及它们是如何协作的,看完这个,再看官方文档也许能更轻松点. blazor中的验证框架分为两部分 ...

  4. 7 个 IntelliJ IDEA 必备插件,显著提升编码效率

    首先说一下idea引入外部插件的方式 用插件 1. FindBugs-IDEA 2. Maven Helper 3. VisualVM Launcher 4. GenerateAllSetter 5. ...

  5. 第一次git上传的完整流程

    第一次git上传的完整流程 使用git简单命令上传代码push到远程仓库 + 简单介绍了一个.git文件结构. 代码上传到gitee和github流程一样的,不过你上传到github可能网不行失败,所 ...

  6. DP 复习

    背包 约定使用 \(v_i\) 表示放入第 \(i\) 件物品的花费,\(w_i\) 表示第 \(i\) 件物品的价值,背包容量 \(M\),物品件数 \(N\). 01 背包 每种物品仅有一件,可以 ...

  7. vscode提取扩展时出错XHR failed

    问题分析 使用cmd的ping工具尝试ping域名 marketplace.visualstudio.com 无法ping通 解决方案 1. 打开本地配置文件  C:\Windows\System32 ...

  8. CF1526C1

    题目简化和分析: 给您一个数组,在其中选择若干个数使得: 任意前缀和 \(\ge 0\) 数量尽可能的大 我们可以使用贪心策略,策略如下: 如果当前数为非负,必喝. 而毒药尽可能的多喝,如果喝没了,就 ...

  9. 小景的工具使用--Java诊断工具Arthas的使用说明

    小景最近在做程序和数据库的压测工作,期间监控压测数据,分析程序原因变成了一个待解决的问题,根据公司小伙伴的建议,接触了阿尔萨斯这个诊断工具,下面小景分别基于Linux操作系统和Windows操作系统, ...

  10. 如何将Python程序打包并保护源代码

    导言: 在某些情况下,我们可能希望将Python程序打包成可执行文件,以便用户无法查看程序的源代码.这种需求通常出现在商业软件.数据分析工具或其他需要保护知识产权的场景中.本文将介绍如何使用PyIns ...