SVELTE
第一印象:这是一个另辟蹊径的框架,或许可以像 React,Vue 一样被广泛应用。
用几个词形容这种印象:目的明确,简洁,小巧。
目的明确
只针对 Web Apps。无虚拟DOM,意味着,不存在像 React,Vue 那样的跨平台的方案,但同时也带来了一定的性能提升(当然这部分的性能提升可能很小,无感知),官网中,更多聚焦在编译体积和速度上。
此外,它还着重地强调了 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/>
只是,Vue 中 Html 部分会用 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 ),这是以前 React, Vue 尚未盛行时,前端比较流行的做法。
当然,它也有遍历数据生成 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 相类似。
它具有 Vue 的 slot (插槽)功能,使用方法跟 Vue 应相差不大。
还有很多有趣的特有的组件/功能。可以说,在开发上,应当是比较畅通无阻的。
定位
对于 svelte 的定位,它是远远超越了 template 且目的明确,目光只聚焦于 web apps ,且相对于 Vue , React 删减了一些特性,轻装上阵。
如果,项目不打算往跨平台方面去考虑的话,svelte 或许可以一试。