live_props v0.2.2 LiveProps.LiveView View Source
Use this module inside a Phoenix.LiveView to expose to add state to your LiveView.
LiveView Lifecycle with LiveProps
LiveProps injects lightweight Phoenix.LiveView.mount/3
and
Phoenix.LiveView.handle_info/2
callbacks to help manage state.
If you define your own mount, it will be run after defaults states have been assigned but before computed states.
The reason we assign computed states last is because they may depend on data from params or session. LiveProps does not handle params and session so you will need to manually assign them in your own mount callback, if needed.
Example
defmodule ThermostatLive do
# If you generated an app with mix phx.new --live,
# the line below would be: use MyAppWeb, :live_view
use Phoenix.LiveView
use LiveProps.LiveView
state :user_id, :integer
state :scale, :atom, default: :fahrenheit
state :temperature, :float, compute: :get_temperature
def render(assigns) do
~L"""
<div>
Current temperature is <%= @temperature %>
</div>
"""
end
def mount(_, %{"current_user_id" => user_id}, socket) do
# socket.assigns.scale already has a default value
{:ok, assign(socket, :user_id, user_id)}
end
def get_temperature(assigns) do
Temperature.get_user_reading(assigns.user_id, assigns.scale)
end
end
First we defined a :user_id
state. This doesn't really do anything other than serve
as documentation, since we assign it manually in the mount callback.
Still, depending on your preferences, you may find it helpful to have a list of all assigns in one place.
Next we defined the :scale
state and gave it a default value. This value will be assigned automatically
on mount and will be available in any custom mount you define.
Finally we defined the :temperature
state, with the options compute: :get_temperature
. This means
this state will be calculated by the get_temperature/1
function, which takes the current assigns
as an argument and returns the value to be assigned.