何时使用handle_params回调

2023-11-29 00:05:13 浏览数 (1)

这个 handle_params/3 回调函数在 Phoenix LiveView 中的作用是利用 URL 中的状态动态驱动 LiveView 的展示。这个功能使得可以轻松地分享 URL,确保其他人观看到相同的 LiveView 状态。handle_params 在挂载后或实时导航事件期间被调用。如果你的 LiveView 状态基于 URL 改变,handle_params 是分配 LiveView 值的正确位置。这有助于避免在 mount/1handle_params/3 中进行冗余处理。

要触发 handle_params/3,可以在服务器端使用 push_patch/2,而 live_patch/2 则通过客户端交互触发 handle_param/3

举例来说,假设我们想要使用 handle_params/3 实现分页、筛选和排序功能。利用以下两个示例,handle_params/3 可以处理五种不同的 URL 状态:

仅分页:/route?page=2&per_page=10

仅筛选:/route?filter=a

仅排序:/route?sort_by=id&sort_order=asc

分页、筛选和排序:/route?page=2&per_page=10&filter=sneakers?sort_by=name&sort_order=asc

未指定(使用默认值):/route

代码语言:text复制
def handle_params(params, _url, socket) do
  paginate_options = %{page: params["page"], per_page: params["per_page"]}
  filter_options = %{filter: params["filter"]}
  sort_options = %{sort_by: params["sort_by"], sort_order: params["sort_order"]}

  shoes =
    Shoes.list_shoes(
      paginate: paginate_options,
      sort: sort_options,
      filter: filter_options
    )

  {:noreply,
    assign(socket,
      options: Map.merge(paginate_options, sort_options, filter_options),
      shoes: shoes
    )}
end

def handle_params(_params, _url, socket) do
  {:noreply, socket}
end

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞