← Усі статті

Руни Svelte 5: явна реактивність замість «магії»

Svelte 5 замінив неявне оновлення інтерфейсу рунами. Що це дало розміру пакета і чим довелося заплатити.

Руни Svelte 5: явна реактивність замість «магії»
Зміст

Коротко

Нотатка на Dev.to згадує обіцянку раннього Svelte: написав let count = 0, змінив змінну — інтерфейс оновився сам, без хуків і масивів залежностей. У п’ятій версії цю обіцянку змінили руни $state, $derived і $effect. Автор вважає їх прямими родичами useState, useMemo і useEffect і сперечається не з користю явної реактивності, а з тим, що каркас перестав відрізнятися від тих, над ким раніше жартував.

Що сталося

Реліз Svelte 5 анонсували 20 вересня 2023 року, стабільним він став наприкінці 2024-го. Руни — це явні виклики: стан, похідне значення і ефект. Раніше компілятор сам відстежував присвоєння звичайним змінним. Тепер розробник позначає, що саме має бути реактивним. Для людини, яка прийшла в Svelte саме за відсутністю цієї позначки, зсув відчувається як зміна договору, а не як косметика синтаксису.

Команда каркаса пояснювала перехід тим, що неявна схема погано масштабується: у великому застосунку важко зрозуміти, від чого залежить оновлення. Автор нотатки цей біль не заперечує. Він наводить і виграш, який для нього вирішує суперечку на користь нової версії: пакет менший приблизно на 55%. Плюс код простіше розкладати по файлах, коли реактивність названа, а не схована в присвоєнні. Це вже не суперечка «руни шкідливі», а суперечка «заради чого відмовилися від колишньої простоти».

Далі тон особистий. Він описує відчуття, що особливий каркас «вимивають» і що Svelte став схожий на решту. Висновок, який він сам називає незручним: явна, функційна реактивність, схоже, спільний пункт призначення, а не капітуляція однієї команди. Компілятор як і раніше робить частину роботи, якої немає в чистих хуках, але щит «вам не потрібно думати про реактивність» руни зняли. Сам він пише, що, найімовірніше, лишиться на п’ятій версії: скорочення пакета для нього вагоміше за ностальгію.

Чому це важливо

Для команди, яка обирає каркас у 2026 році, старі порівняння «Svelte без хуків проти React з хуками» уже брешуть. Порівнювати потрібно явну модель з явною: де компілятор усе ще прибирає роботу за вас, наскільки менший пакет, і чи готові люди в коді бачити $state, а не «просто змінну». Обіцянку чотирирічної давнини у вакансії і в підручнику варто поправити, інакше новачок прийде за магією і отримає руни.

Другий шар — про ідентичність інструмента. Збіг до однієї ідеї не дорівнює марності. Якщо кілька каркасів незалежно приходять до явних залежностей, значить неявна схема погано жила у великих кодових базах, а не «маркетинг переміг». Втрата при цьому справжня: менше несподіванок ціною того, що реактивність знову треба оголошувати. Це чесний компроміс, якщо його так і називати.

На практиці

Нотатка — думка одного розробника, не замір розміру пакета на вашому застосунку. 55% має сенс перевірити збіркою до і після переходу, а не цитувати як паспорт Svelte 5. Міграція старих присвоєнь на руни ламає звичку «змінив змінну — і все», тому її краще робити на модулях, де залежності і так уже плуталися.

Лишатися на четвертій версії «щоб було як раніше» теж ціна: нові матеріали і виправлення дивляться на руни. Автор для себе обирає п’яту і водночас просить не робити вигляд, ніби нічого не змінилося.

  1. В онбордингу показуйте $state, $derived і $effect поруч зі звичними хуками, щоб не продавати застарілу «магію».
  2. Перед міграцією зберіть пакет на своєму застосунку і порівняйте розмір, а не лише відчуття від синтаксису.
  3. Перекладайте спочатку ті модулі, де неявні оновлення вже важко читати.
  4. Не чекайте, що компілятор знову сховає реактивність: її потрібно оголошувати, навіть якщо частину роботи він бере на себе.

Підсумок

Svelte 5 лишив компілятор і забрав обіцянку, що інтерфейс оновлюється від звичайного присвоєння. Автор нотатки вважає це втратою характеру і водночас розумною платою за масштаб і менший пакет. Для вибору каркаса важливіша не ностальгія, а те, чи збігається нинішня явна модель із тим, що ви досі розповідаєте команді про Svelte.

Коментарі

Завантаження коментарів…