svelte的一些基础demo
脚手架
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的更多相关文章
- Qwt开发笔记(一):Qwt简介、下载以及基础demo工程模板
前言 QWT开发笔记系列整理集合,这是目前使用最为广泛的Qt图表类(Qt的QWidget代码方向只有QtCharts,Qwt,QCustomPlot),使用多年,系统性的整理,本系列旨在系统解说并 ...
- node-webkit 环境搭建与基础demo
首先去github上面下载(地址),具体更具自己的系统,我的是windows,这里只给出windows的做法 下载windows x64版本 下载之后解压,得到以下东西 为了方便,我们直接在这个目录中 ...
- [spring security] spring security 4 基础Demo
依赖包: <properties> <junit.version>4.11</junit.version> <spring.version>4.1.6. ...
- iOS开发-UI基础Demo
现在更多的学习资料都是xCode4.X的,发现xCode6.1还是很多东西,如果有正在学习iOS开发的可以通过Demo简单了解下iOS的UI开发~ 1.新建单视图文件: 2.新建项目名称,语言选择OC ...
- ios socket(基础demo)
http://blog.sina.com.cn/s/blog_7a2f0a830101ecv4.html clinetSocket 1.viewcontroller.h @interface View ...
- [jquery] jQuery jsTree V3.2.1 基础Demo
引入对应的文件: <link rel="stylesheet" href="../dist/themes/default/style.min.css" / ...
- Sencha 基础Demo测试,三种showView的方法
直接贴代码吧 Ext.define("build.controller.MainController",{ extend:"Ext.app.Controller" ...
- webpack学习(二):先写几个webpack基础demo
一.先写一个简单demo1 1-1安装好webpack后创建这样一个目录: 1-2:向src各文件和dist/index.html文件写入内容: <!DOCTYPE html> <h ...
- java多线程 基础demo
join() 让主进程等待子进程全部执行完 例子如下: package mocker; public class TestThread5 extends Thread { priva ...
- Groovy语言学习--语法基础(4)
语法基础到此就结束了,毕竟其和Java许多地方并无差别.groovy作为脚本,是为了能更好地随业务变化调整规则,我根据自己对规则的理解 通过一张图简单描述一个groovy脚本场景:由于货币膨胀,经济收 ...
随机推荐
- 实战指南,SpringBoot + Mybatis 如何对接多数据源
本文分享自华为云社区 <实战指南,SpringBoot + Mybatis 如何对接多数据源>,作者:战斧. 在我们开发一些具有综合功能的项目时,往往会碰到一种情况,需要同时连接多个数据库 ...
- 《最新出炉》系列初窥篇-Python+Playwright自动化测试-17-处理鼠标悬停
1.简介 有些测试场景或者事件,playwright根本就没有直接提供方法去操作,而且也不可能把各种测试场景都全面覆盖提供方法去操作.比如:就像鼠标悬停,一般测试场景鼠标悬停分两种常见,一种是鼠标悬停 ...
- 其它——各主流Linux系统解决pip安装mysqlclient报错
文章目录 一 CentOS(红帽) 二 Ubuntu 三 Windows 一 CentOS(红帽) #CentOS有Python.Mysql的开发工具包,安装后使用pip安装mysqlclient即可 ...
- 前端三件套系例之BootStrap——BootStrap基础、 BootStrap布局
文章目录 1 BootStrap基础 1 什么是BootStrap 2 BootStrap的版本 3 BootStrap 下载 4 CDN服务 5 目录结构 6 基本模板 7 浏览器支持 8 浏览器兼 ...
- ChatGPT API FAQ
ChatGPT API FAQ General questions about the ChatGPT API Written by Johanna C.. Updated over a week a ...
- macbook-键盘连击问题001
最近一段时间,我的笔记本(17年款 macbook pro 13寸)经常出现键盘连击问题. 最大的表现是 e/n/i 这几个按键,按下的时候,会有概率的出现两个或三个. 这不是个案 搜索了一下,有不少 ...
- 若依(ruoyi)开源系统保姆级实践-完成第一个页面
一.案例描述 若依官网文档地址:http://doc.ruoyi.vip/ruoyi/document/hjbs.html 本教程主要内容,自定义数据库表,使用若依开源系统生成代码并配置权限. 若依环 ...
- 详解.NET依赖注入中对象的创建与“销毁”
在DI容器中注册类型,DI容器就可以帮我们创建类型的实例:如果注册类型实现了IAsyncDisposable或者IDisposable接口,对象销毁时DI容器还会帮我们调用DisposeAsync或D ...
- NPOI在EXCEL中插入图片和超链接
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Jenkins软件平台安装部署
1.Jenkins软件平台概念剖解: 基于主流的Hudson/Jenkins平台工具实现全自动网站部署.网站测试.网站回滚会大大的减轻网站部署的成本,Jenkins的前身为Hudson,Hudson主 ...