にむかひて

Phoenix1.6でコンポーネントな共通処理をどう書く?

2022年2月 トップ > ひとこと > 調査したことの記録
#Elixir #Phoenix

共通処理の書き方の作法がピンとこない

  • アトムのような小さなパーツ(e.g. raw icon())でもなく、
  • live_component を使うほどでもない
  • また content_tag の入れ子で作るのがしんどい

結論

<.hoge name="foo" /> で呼び出すことで、~Hの形式で返せるヘルパー関数が作れる

  • // 表現が怪しい
  • 公式にそれっぽいサンプルがあった
<.my_link href="/" id={@id} new_window={true} class="my-class">Home</.my_link>
def my_link(assigns) do
  target = if assigns[:new_window], do: "_blank", else: false
  extra = assigns_to_attributes(assigns, [:new_window])

  assigns =
    assigns
    |> Phoenix.LiveView.assign(:target, target)
    |> Phoenix.LiveView.assign(:extra, extra)

  ~H"""
  <a href={@href} target={@target} {@extra}>
    <%= render_slot(@inner_block) %>
  </a>
  """
end

参考にさせていただいた資料

サイト内検索