Phoenix Handle Info Self Example

From ElixirBlocks
Jump to: navigation, search
defmodule AppWeb.Sandbox do
  use AppWeb, :live_view
  require Logger

  def mount(_params, _session, socket) do
    {:ok, assign(socket, :count, 0)}
  end

  def handle_event("increment", _params, socket) do
    # Send a message to ourselves after 1000 milliseconds (1 second)
    Process.send_after(self(), :delayed_increment, 1000)
    {:noreply, socket}
  end

  def handle_info(:delayed_increment, socket) do
    new_count = socket.assigns.count + 1
    Logger.info("Incrementing count to: #{new_count}")
    {:noreply, assign(socket, :count, new_count)}
  end

  def render(assigns) do
    ~H"""
    <div>
      <h2>Delayed Counter</h2>
      <p>Count: <%= @count %></p>
      <button phx-click="increment">Increment After Delay</button>
    </div>
    """
  end
end