RailsのView Componentについて確認した
Rails 6.1でView Componentが導入されるというのをずいぶん前にみて、Rails 6.1がリリースされて最終的にどうなったのか把握してなかったので確認した。
結論からいうと、Rails 6.1からrender
にrender_in
メソッドを持つオブジェクトを渡せるようになった、だけだった:
class ViewComponent
def render_in(view_context)
'hello'
end
end
<%= render ViewComponent.new %>
CHANGELOG:
https://github.com/rails/rails/blob/6-1-stable/actionview/CHANGELOG.md
RenderingHelper
supports rendering objects thatrespond_to?
:render_in
.
Rails Guideの記載:
https://guides.rubyonrails.org/layouts_and_rendering.html#rendering-objects
あと、Rails的には別にView Componentという呼称は使ってないみたい。
View Component的なことをやりやすいようにRails側にフックポイントを用意した、と理解した。
導入の元ネタになったgithub/view_componentもrender_in
メソッドを実装してる:
https://github.com/github/view_component/blob/main/lib/view_component/base.rb#L58
個人的に、いままではビュー用のロジックを書く場所として、ビューヘルパかactive_decoratorを導入してデコレータを作るの2択だったけど、局所的で独立性が高いロジックは座りが悪い感じがあった。render_in
メソッドを定義したクラスを作るパターンでどうなるか、試してみたい。