Svelte 最近合併了一項重要功能,允許派生值變為可寫的,為其響應式系統增加了新功能。這一變更是 Svelte 5 的 runes 系統轉型的一部分,這引發了開發者社群對該框架演進及其對開發者體驗影響的廣泛討論。
可寫派生值
新合併的功能使 Svelte 5 中的派生值變為可寫的,解決了應用程式開發中的實際需求。此前,派生值嚴格只讀,從概念上講這是合理的(因為它們是從其他值計算得出的),但限制了某些使用場景。透過此更改,開發者現在可以覆蓋派生值,實現更靈活的模式,比如樂觀 UI 更新,即在後端確認前可以顯示臨時本地值。
「我喜歡 runes,我喜歡 svelte 5,我喜歡 sveltekit。它們一起為開發提供了無縫的入門體驗,讓你能夠快速掌握類似 JS/HTML 的概念。」
Runes 爭議
Svelte 5 中引入的 runes 代表了從之前版本的魔法響應式向更明確模型的重大轉變,使用帶有 $ 字首的特殊宣告,如 $state
、$derived
和 $effect
。雖然這一變化引起了爭議,但許多在大型專案中使用 runes 的開發者反饋,初期的學習曲線過後,程式碼的可維護性和清晰度得到了提高。runes 的明確性使得在複雜元件中更容易理解資料流,而在之前的響應式模型中,多個繫結屬性和派生狀態可能會導致混淆。
Svelte 5 核心符文
$state
- 宣告響應式狀態$derived
- 建立從其他響應式值派生的值(現在可寫)$effect
- 當依賴項變化時執行副作用
社群情緒
- 積極的: 在大型專案中提供更好的清晰度,更可預測的響應性
- 消極的: 失去簡單性,學習曲線更陡峭,過渡挑戰
- 複雜的: 以犧牲初始優雅為代價提高可維護性
開發者體驗的權衡
社群對於 Svelte 的演進是改善還是削弱了開發者體驗似乎存在分歧。一些開發者哀嘆失去了 Svelte 原有的簡潔和優雅,這些特性使其特別適合小型專案。另一些人則認為 runes 解決了大型應用中出現的關鍵問題,在這些應用中,之前版本的魔法可能導致意外行為和除錯挑戰。
對於從事生產應用的團隊來說,遷移到 Svelte 5 的體驗褒貶不一。一些團隊報告說自動遷移工具效果出奇地好,即使對於較大的程式碼庫也只需要很少的手動調整。其他團隊則指出生態系統正處於過渡期,許多庫仍在使用舊的儲存模式,而非新的 runes 系統。
生態系統考量
在這個過渡期,Svelte 生態系統面臨挑戰。與 React 成熟的生態系統相比,Svelte 的 UI 庫和工具較少,而且許多現有的包由小型團隊維護,這些團隊現在正在處理遷移工作。這為考慮在新專案中使用 Svelte 的團隊帶來了暫時的不利因素,儘管從長遠來看,核心框架的改進可能會超過這些顧慮。
對於評估前端框架的開發者來說,這一過渡時刻突顯了重要考量。帶有 runes 的 Svelte 5 似乎以犧牲一些初始優雅為代價,為複雜應用提供了更好的可擴充套件性,而競爭框架如 React 在生態系統廣度和工具支援方面保持優勢。
隨著 Svelte 的不斷發展,這一允許可寫派生值的最新功能展示了團隊致力於平衡概念純粹性和實際開發者需求的承諾。這種方法是否能幫助 Svelte 獲得更廣泛的採用還有待觀察,但很明顯,該框架正在以解決實際應用開發挑戰的方式成熟。