Share
Embed
Transcript
20 slides
-
Ripple-TS (Ripple) とは Reactや、Svelte 5の開発に深く携わってきた Dominic Gannaway氏が開発している、新しいフロントエンドフレームワーク “the elegant TypeScript
UI framework” https://www.ripple-ts.com -
現状の整理 Framework 書き方 更新モデル React JSX 🧱 Virtual DOM Vue.js
SFC / template / JSX 🧱 Virtual DOM Vue Vapor SFC / JSX ⚡ Fine-grained Svelte SFC風 ⚡ Fine-grained Solid.js JSX ⚡ Fine-grained -
Ripple(と TSRX)がある世界 Framework 書き方 更新モデル React JSX / TSRX 🧱
Virtual DOM Vue.js SFC / template / JSX 🧱 Virtual DOM Vue Vapor SFC / JSX / TSRX ⚡ Fine-grained Svelte SFC風 ⚡ Fine-grained Solid.js JSX / TSRX ⚡ Fine-grained Ripple TSRX ⚡ Fine-grained -
TSRXの⽂法 (1 / React) const App__static1 = <div>{'Hello, world!'}</div>; function
App() { return App__static1; } component App() { <div> "Hello, world!" </div> } compile -
TSRXの⽂法 (2) type Props = { name: string }; component
App({ name }: Props) { <div> "Hello, " {name} "!" </div> } -
type Props = { name: string }; component App({ name
}: Props) { <div> "Hello, " {name} "!" </div> } TSRXの⽂法 (2 / React) type Props = { name: string }; function App({ name }: Props) { return ( <div> {'Hello, '} {name} {'!'} </div> ); } compile -
TSRXの⽂法 (3) type Props = { name?: string }; component
App({ name }: Props) { <div> "Hello, " if (name) { {name} } else { "world" } "!" </div> } -
TSRXの⽂法 (3 / React) type Props = { name?: string
}; component App({ name }: Props) { <div> "Hello, " if (name) { {name} } else { "world" } "!" </div> } type Props = { name?: string }; function App({ name }: Props) { return ( <div> {'Hello, '} {name ? name : 'world'} {'!'} </div> ); } compile -
TSRXの⽂法 (scoped-style, for-of, try-catch) component TodoList({ items }) { <ul>
for (const item of items) { <li>{item}</li> } </ul> <style> .ul { list-style: none; } </style> } component SafeProfile({ userId }) { try { <UserProfile id={userId} /> } catch (error) { <div class="error"> <p> "Something went wrong." </p> </div> } } -
Fine-grained reactivityと記法 Fine-grained reactivityの実現には記述方法に制約が生まれがち。 (変数直接アクセス、代入では使用箇所の追跡、変更の検知ができないため) // 変数直接アクセス・代入 let state =
0; console.log(state); state = 1; // 利用箇所追跡、変更通知可能 const state = createState(0); console.log(state.value); state.value = 1; function createState(init) { let _state = init; return { get value() { return _state; // +追跡処理 }, set value(val) { _state = val; // +変更通知 } }; } -
Fine-grained reactivityとTSRX TSRXではLazy destructuring (&{} / &[])と呼ばれる文法を導入して、 JavaScriptのメンタルモデルを極力維持しつつ記法の制限を乗り越える。 // 変数直接アクセス・代入
let state = 0; console.log(state); state = 1; // 利用箇所追跡、変更通知可能 const &{ value } = createState(0); console.log(value); value = 1; let state = 0; console.log(state); state = 1; const __lazy0 = createState(0); console.log(__lazy0.value); __lazy0.value = 1; compile -
Rippleの特徴 RippleはTSRXファーストなフレームワークの1つ。 • TSRXを前提とした優れた開発者体験 ◦ AI含む • 優れたパフォーマンス ◦ 一般的なSignalsとは異なるアプローチ
(時間都合で省略 詳細はAsk the Speakerへ) • Viteベースのメタフレームワーク提供 ◦ SSRなども含む ◦ 絶賛進行中 -
Svelte 5の開発から • 独自構文・コンパイル方式でもユーザーは利用する • Signals開発における知見 Reactの開発から • Hooksの構造的な難しさ •
大規模なReactからの移行難度 ◦ TSRXをフレームワーク移行の中間パスとして利用可能に (Solid.js作者Ryan Carniato氏との対談で言及されている https://www.youtube.com/watch?v=xulUG54CW4c) Dominic Gannaway⽒の視点