这个 handle_params/3
回调函数在 Phoenix LiveView 中的作用是利用 URL 中的状态动态驱动 LiveView 的展示。这个功能使得可以轻松地分享 URL,确保其他人观看到相同的 LiveView 状态。handle_params
在挂载后或实时导航事件期间被调用。如果你的 LiveView 状态基于 URL 改变,handle_params
是分配 LiveView 值的正确位置。这有助于避免在 mount/1
和 handle_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
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腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!