SaturnFramework / Saturn

Opinionated, web development framework for F# which implements the server-side, functional MVC pattern
https://saturnframework.org
MIT License
707 stars 108 forks source link

[WIP] Live components #247

Open Krzysztof-Cieslak opened 4 years ago

Krzysztof-Cieslak commented 4 years ago

So... this is initial implementation fo Live Components. Inspired by Phoenix Live View they are designed to enable rich, real-time user experiences with server-rendered HTML. Under the hood, they're powered by our current channel implementation - essentially liveComponent is specialized channel.

What is different from Phoenix Life View is that Live Components implements MVU pattern. Essentially each component is small MVU application (it has its internal state and event loop), all operations known from MVU - init, update, view - are performed on the server, and after the view is rendered we push it to the client through web socket - this will then be used by some JS diffing library to update the DOM. Similarly to MVU, we define 'State and 'Msg types that represent state and actions in our component - both are defined on the server side

In current shape, PR is not usable at all, but it shows the basic design of server-side of liveComponent.

Currently missing:

Closes #228.

CC: @panesofglass @Banashek @baronfel

panesofglass commented 4 years ago

Outstanding!!!

tforkmann commented 2 years ago

@Krzysztof-Cieslak @Zaid-Ajaj This looks interesting. Should this get implemented? I think only the refactoring of the LiveComponentBuilderState is missing right?

Krzysztof-Cieslak commented 2 years ago

@tforkmann, there's also a client-side component (i.e. JS library) that probably we should provide to make it easy to use in practice. And add helpers for actually using this client-side library in the server-side rendered code to define communication between client and server.