全书目录

第三十八篇:Phoenix 完全指南 —— 实时频道城邦宇宙

第十二章:Live navigation,是城内换街区,不是重新出城进城

1 分钟 242 字 第 731 / 962 个阅读单元

LiveView 有个非常好用的能力:live navigation

官方文档把它分得很清楚:

  • patch
  • navigate

你可以这样记:

  • patch:还在同一个中控室,只是更新当前街区参数
  • navigate:离开当前中控室,切到另一个中控室
  • href / redirect:普通出城再进城,完整刷新

看例子:

elixir
<.link patch={~p"/live/dispatches?page=2"}>下一页</.link>
<.link navigate={~p"/live/reports"}>去报表中心</.link>
<.link href={~p"/dispatches"}>回普通页面</.link>

服务端:

elixir
{:noreply, push_patch(socket, to: ~p"/live/dispatches?page=2")}
{:noreply, push_navigate(socket, to: ~p"/live/reports")}

它们的区别不是“语法癖好”,而是生命周期真的不一样。

text
patch
  = 同一 LiveView 内参数变化
  = 调 handle_params/3
  = 发最小差异

navigate
  = 换到另一个 LiveView
  = 保留 live session 内的壳子
  = 不做整页刷新

href / redirect
  = 走普通 HTTP
  = 全页重载

这使 Phoenix 的页面导航能非常细腻。
你不必在“全页刷新”和“整站 SPA”之间做二元选择。