Clapton
https://github.com/kawakamimoeki/clapton
repoが消えてる...?bsahd.icon
Clapton is a Ruby on Rails gem for building web apps with pure Ruby only (no JavaScript and no HTML templates).
google翻訳.icon> Clapton は、純粋な Ruby のみ (JavaScript や HTML テンプレートなし) で Web アプリを構築するための Ruby on Rails gem です。
作者:moeki
ReactでいうところのuseEffect()を実装できたmoeki.icon
code:video_component.rb
class VideoComponent < Clapton::Component
def render
box = c(:box)
box
.add(c(:button)
.add(c(:text, @state.is_playing ? "Pause" : "Play")))
.add_action(:click, :VideoState, :toggle_play)
box.add(VideoPlayerComponent.new(url: @state.video_url, is_playing: @state.is_playing))
end
end
code:video_player_component.rb
class VideoPlayerComponent < Clapton::Component
def render
c(:embed, <<~HTML
<video id="video" src="#{@state.url}"></video>
HTML
)
end
effect :is_playing do |state|
if state:is_playing
document.getElementById("video").play()
else
document.getElementById("video").pause()
end
end
end
サーバーサイドで非同期処理を選べるようにしたいんだけどいいインタフェースが思いついてない
しかし、actionの中でyieldで最初にメッセージ送ってれば非同期と同じことはできるのか?