2021-02-09 22:58

RailsのView Componentについて確認した

Rails

Rails 6.1でView Componentが導入されるというのをずいぶん前にみて、Rails 6.1がリリースされて最終的にどうなったのか把握してなかったので確認した。

結論からいうと、Rails 6.1からrenderrender_inメソッドを持つオブジェクトを渡せるようになった、だけだった:

class ViewComponent
  def render_in(view_context)
    'hello'
  end
end

<%= render ViewComponent.new %>
RenderingHelper supports rendering objects that respond_to? :render_in.

あと、Rails的には別にView Componentという呼称は使ってないみたい。
View Component的なことをやりやすいようにRails側にフックポイントを用意した、と理解した。

導入の元ネタになったgithub/view_componentrender_inメソッドを実装してる:

https://github.com/github/view_component/blob/main/lib/view_component/base.rb#L58

個人的に、いままではビュー用のロジックを書く場所として、ビューヘルパかactive_decoratorを導入してデコレータを作るの2択だったけど、局所的で独立性が高いロジックは座りが悪い感じがあった。render_inメソッドを定義したクラスを作るパターンでどうなるか、試してみたい。