Svelte 简单了解

543 阅读2分钟

SVELTE

第一印象:这是一个另辟蹊径的框架,或许可以像 ReactVue 一样被广泛应用。

用几个词形容这种印象:目的明确简洁小巧

目的明确

只针对 Web Apps。无虚拟DOM,意味着,不存在像 ReactVue 那样的跨平台的方案,但同时也带来了一定的性能提升(当然这部分的性能提升可能很小,无感知),官网中,更多聚焦在编译体积和速度上。

此外,它还着重地强调了 Reactivity ,它为 JavaScript 自身添加了 reactivity 。此处应当重点关注

简洁

写法更类似于 Vue

<script>
	import Nested from './Nested.svelte';
</script>

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

<p>These styles...</p>
<Nested/>

只是,VueHtml 部分会用 template 标签包围起来。

当然,此处并没有体现出它的简洁之处,且看下面代码:

// https://www.sveltejs.cn/examples#else-if-blocks
<script>
	let x = 7;
</script>

{#if x > 10}
	<p>{x} is greater than 10</p>
{:else if 5 > x}
	<p>{x} is less than 5</p>
{:else}
	<p>{x} is between 5 and 10</p>
{/if}

这个语法更贴近 template 的写法(如 art-template ),这是以前 ReactVue 尚未盛行时,前端比较流行的做法。

当然,它也有遍历数据生成 Html 节点的功能:

// https://www.sveltejs.cn/examples#each-blocks
<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}">
			{i + 1}: {name}
		</a></li>
	{/each}
</ul>

小巧

麻雀虽小,五脏俱全。它拥有 template 无法比拟的优势,就是它拥有生命周期:onMount onDestory beforeUpdate afterUpdate tick

此外,它还有事件方面的处理,不仅支持原生事件,还支持组件自定义事件。

也支持 props ,父子组件通信应无问题且跟 React 相类似。

它具有 Vueslot (插槽)功能,使用方法跟 Vue 应相差不大。

还有很多有趣的特有的组件/功能。可以说,在开发上,应当是比较畅通无阻的。

定位

对于 svelte 的定位,它是远远超越了 template 且目的明确,目光只聚焦于 web apps ,且相对于 Vue , React 删减了一些特性,轻装上阵。

如果,项目不打算往跨平台方面去考虑的话,svelte 或许可以一试。

参考

Svelte

Svelte Examples