如何在 phoenix 中创建 LiveViews

问题描述 投票:0回答:1

我有以下用于简单实时视图的代码,它曾经在我的另一台计算机上工作,但我似乎无法让它工作了:

defmodule ProjectWeb.CounterLive do
  use Phoenix.LiveView

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

  def render(assigns) do
    ~L"""
      <h1>Count: <%= @count %></h1>
    """
  end
end
elixir phoenix-framework phoenix-live-view
1个回答
0
投票

根据 Phoenix.LiveView docs:

mount(params, session, socket) 

@callback mount(
  params :: unsigned_params() | :not_mounted_at_router,
  session :: map(),
  socket :: Phoenix.LiveView.Socket.t()
) ::
  {:ok, Phoenix.LiveView.Socket.t()}
  | {:ok, Phoenix.LiveView.Socket.t(), keyword()}
The LiveView entry-point.

对于模板根目录中的每个 LiveView,调用 mount/3 两次: 一次进行初始页面加载,一次建立实时 插座。

它需要三个参数:

params - 包含公共信息的字符串键映射 可以由用户设置。该地图包含查询参数以及 任何路由器路径参数。如果 LiveView 未安装在 router,这个参数是 atom :not_mounted_at_router session - the 连接会话套接字 - LiveView 套接字它必须返回 {:ok, socket} 或 {:ok, socket, options},其中 options 是以下之一:

:temporary_assigns - 临时分配的关键字列表 每次渲染后都必须重置为它们的值。请注意,一旦 值被重置,它不会被重新渲染,直到它被显式地 分配

:layout - LiveView 使用的可选布局。设置这个 选项将覆盖之前通过设置的任何布局 Phoenix.LiveView.Router.live_session/2 或正在使用 Phoenix.LiveView

...但是你定义了一个 mount/2:

  def mount(_session, socket) do
    socket = assign(socket, :count, 0)
    {:ok, socket}
  end
© www.soinside.com 2019 - 2024. All rights reserved.