全书目录

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

第十三章:LiveView 不是“不要 JavaScript”,而是“把 JavaScript 放回正确位置”

1 分钟 355 字 第 732 / 962 个阅读单元

这是另一个大误区。

很多人一听 Phoenix LiveView,就以为:

text
前端不重要了
JS 没用了

完全不是。

Phoenix 官方对 JS 的态度一直很清楚:

  • 能用声明式 Phoenix.LiveView.JS 命令解决的,先用它
  • 真有需要,就用 hooks / JS interop
  • 不是禁止 JS,而是不鼓励为了小交互就把整页变成前端应用

比如客户端小交互:

elixir
alias Phoenix.LiveView.JS

<button
  phx-click={
    JS.push("toggle_filters")
    |> JS.toggle(to: "#filters-panel")
  }
>
  筛选器
</button>

这类交互不需要你额外开一整套前端框架。
而且 LiveView 的 JS 命令是 DOM patch aware 的,也就是知道如何在服务器补丁更新后继续保持行为一致。

如果你真要接第三方库、地图、图表、复杂拖拽,也可以上 Hook:

javascript
let Hooks = {}

Hooks.MapBoard = {
  mounted() {
    this.map = createMap(this.el, this.el.dataset.center)
  },
  updated() {
    syncMarkers(this.map, this.el.dataset.markers)
  },
  destroyed() {
    this.map?.remove()
  }
}

所以 Phoenix 的正确态度不是“零 JS 宗教”,而是:

默认别把整座城的交互治理都外包给浏览器,但该用 JS 时就精确地用。