Svelte 5 是一种兴奋剂

文摘   2024-11-14 18:26   中国香港  

Svelte 5 带来了重大更新,使其语法更接近 React,但保持了自身的简洁特色。

状态声明对比

Svelte 5 之前, 创建状态--你可以用let 创建状态变量:

Svelte 5

React

Svelte 的实现更加简洁,无需定义组件名称,代码更加优雅。

副作用处理

状态监听

React:

Svelte 5 之前,不得不使用一种不自然的$:语法来观察变化,并创建派生状态:

Svelte 5:

Svelte 自动追踪依赖,不需要手动声明依赖数组。

派生状态

// React
const doubleCount = useMemo(() => count * 2, [count]);

// Svelte 5
const double = $derived(count * 2);

事件处理

组件事件

// React
function Button({ onClick }{
  return <button onClick={onClick}>Click me</button>;
}

Svelte 5 之前

Svelte 5

自定义事件

// Svelte 5
<script>
  const { onCustomEvent } = $props();
  
  function handleClick({
    onCustomEvent('hello');
  }
</script>
<button on:click={handleClick}>触发事件</
button>

组件属性处理

Props 声明

// React
function Greeting({ name = 'World' }{
  return <h1>Hello, {name}!</h1>;
}

Svelte 5 之前

Svelte 5

实际应用示例

1. 表单处理

// Svelte 5
function Form({
  const [formData, setFormData] = $state({
    username'',
    password''
  });
  
  const isValid = $derived(
    formData.username.length > 0 && 
    formData.password.length >= 6
  );
  
  $effect(() => {
    if (isValid) {
      console.log('表单验证通过');
    }
  });
  
  return /* ... */;
}

2. 数据加载

function DataLoader({
  const [data, setData] = $state(null);
  const [loading, setLoading] = $state(true);
  
  $effect(async () => {
    try {
      const response = await fetch('/api/data');
      setData(await response.json());
    } finally {
      setLoading(false);
    }
  });
  
  return /* ... */;
}

核心优势

  1. 更简洁的语法:减少样板代码
  2. 智能依赖追踪:无需手动声明
  3. 更好的性能:保持了 Svelte 的高性能特性
  4. 更低的学习曲线:特别是对 React 开发者

Svelte 5 的这些更新让开发体验更加流畅,同时保持了框架的高性能特性。对于想尝试 Svelte 的 React 开发者来说,现在是最好的时机!🎉


最后:
React Hook 深入浅出
CSS技巧与案例详解
vue2与vue3技巧合集
VueUse源码解读


JavaScript 每日一练
每天一道JavaScript 实战题,让大家平时多多积累实用的知识,提高开发效率,才有更多的时间摸鱼。
 最新文章