Open TBSten opened 2 weeks ago
以下のような記法を可能にし、サーバサイドのレンダリングの一部をクライアントサイドに委譲するClientSlotを実装する。
// server side code (jvmMain) element.renderComposable { Div { +"this render on server" ClientSlot(HogeSlotId, HogeSlotId(num = 123, str = "hoge")) } } // shared code (commonMain) object HogeSlotId : ClientSlotId<Args> { @Serializable data class Args( num: Int, str: String, ) } // client side code (jsMain) object HogeClientSlotImpl : ClientSlotImplementation(HogeSlotId) { @Composable fun Content() { val args: HogeSlotId.Args = getArg() // it will be `HogeSlotId.Args(num = 123, str = "hoge")` Div { +"this render on client" } } @Composable fun Loading() { CircularProgressIndicator() } }
<!-- result --> <div> this render on server <div> this render on client </div> </div>
スロットの引数には サーバでレンダリングしたレンダリング結果も含めることができるようにする。 (compositionパターンを実装できるようにするため)
シリアライゼーション機構は #3 で用意する。
とりあえずプロトタイプはできた
概要
以下のような記法を可能にし、サーバサイドのレンダリングの一部をクライアントサイドに委譲するClientSlotを実装する。
スロットの引数には サーバでレンダリングしたレンダリング結果も含めることができるようにする。 (compositionパターンを実装できるようにするため)