我喜欢 Svelte 的 5 个理由 最后的想法

2025-06-09

我喜欢 Svelte 的 5 个理由

最后的想法

我决定写这篇文章来谈谈我第一次尝试 Svelte 后学到的一些事情。

如果你不知道 Svelte 是什么,请查看以下链接:https://svelte.dev/blog/svelte-3-rethinking-reactivity

TL;DR

  • React 和 Vue 等传统框架的大部分工作都是在浏览器中完成的
  • Svelte 将该工作转移到构建应用程序时发生的编译步骤。
  • Svelte 不使用虚拟 DOM 差异等技术,而是编写代码,在应用程序状态发生变化时精确更新 DOM。

这太酷了,但我发现还有其他一些事情值得一提:

1- 无障碍优先

Svelte 特别注重可访问性,如果你编写了无法访问的标记,它会发出警告

2-传播道具

如果您有一个属性对象,您可以将其“传播”到组件上,而不是像这样指定每个属性:

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

    const info = {
        firstName: 'Mauro',
        lastName: 'Garcia',
        country: 'Argentina',
        website: 'https://maurogarcia.dev'
    };
</script>

<UserInfo {...info}/>
Enter fullscreen mode Exit fullscreen mode

3-无需虚拟元素

您不需要在视图中为条件和循环创建虚拟元素

{#if user.loggedIn}
    <button on:click={toggle}>
        Log out
    </button>
{:else}
    <button on:click={toggle}>
        Log in
    </button>
{/if}

<ul>
    {#each articles as article}
        <li><span>{article.title}</span></li>
    {/each}
</ul>
Enter fullscreen mode Exit fullscreen mode

4- 标记中的 await 承诺

使用异步数据?看看如何轻松定义在获取数据时和获取数据后渲染的内容:

{#await user}
    <p>...waiting</p>
{:then data}
    <p>Welcome, {data.firstName} + {data.lastName}</p>
{:catch error}
    <p style="color: red">{error.message}</p>
{/await}
Enter fullscreen mode Exit fullscreen mode

5-商店

商店只是一个具有订阅方法的对象,它允许感兴趣的各方在商店值发生变化时收到通知。

在以下示例中,Incrementer组件将更新计数存储,然后,我在 App.Svelte 组件中使用自动订阅,以便在计数存储值发生变化时收到通知(您可以通过在存储名称前加上 $ 来引用存储值)

// stores.js
import { writable } from 'svelte/store';

export const count = writable(0);
Enter fullscreen mode Exit fullscreen mode
<!-- App.Svelte -->
<script>
    import { count } from './stores.js';
    import Incrementer from './Incrementer.svelte';
</script>

<!-- Prefix count with $ to use auto-subscription -->
<h1>The count is {$count}</h1>

<Incrementer/>

<!-- Incrementer.Svelte -->
<script>
    import { count } from './stores.js';

    function increment() {
        count.update(n => n + 1);
    }
</script>

<button on:click={increment}>
    +
</button>
Enter fullscreen mode Exit fullscreen mode

最后的想法

几年前,我决定将注意力集中在 Angular 上,成功地抵制了尝试 React 或 Vue 等其他酷炫框架的诱惑。这个决定主要有两个目的:

  • 通过尽可能多地重复使用代码来提高我的生产力。
  • 精通某个特定的框架。就我而言,是 Angular。

但在使用 Angular 多年之后,我决定看看其他框架👀。就在那时,Svelte 立刻吸引了我的注意。
我非常喜欢 Svelte 专注于代码简洁和简洁性,从而大幅减少了 bug。

虽然我还没有考虑在所有项目中都使用 Svelte,但这是一个非常大的改变,我会密切关注它的开发,并继续与大家分享一些实验。
我期待的主要功能之一是 TypeScript 支持。在从事类型检查多年之后,我认为这个功能对于我全面转型来说是必不可少的。

有用的链接


你尝试过 Svelte 吗?感觉怎么样?请在下方评论区留言告诉我 👇

鏂囩珷鏉ユ簮锛�https://dev.to/mauro_codes/5-things-i-love-about-svelte-39h9
PREV
我的 2019 年 DEV 之旅 - 查看你的数据!想知道你的数据吗?快来试试吧!
NEXT
4 个有用的 tailwindcss 代码片段,使用可重用组件避免代码重复,响应式网格,彩色笔记,按钮