I have some LiveViews with some very long render templates. To aid modularity and readability, I’ve experimented with moving portions of the templates into function components. For example:
defmodule MyAppWeb.TestLive do
use MyAppWeb, :live_view
def mount(_params, _session, socket) do
{:ok, assign(socket, name: "John Doe", message: "Hello")}
end
def render(assigns) do
~H"""
<.my_header name={@name}/>
<.my_body message={@message} />
"""
end
def my_body(assigns) do
~H"""
<p><%= @message %></p>
"""
end
def my_header(assigns) do
~H"""
<h1><%= @name %></h1>
"""
end
end
Can anyone see anything wrong with this approach?