mix phx.new liveview_example --livecd liveview_examplemix phx.server
--live
sẽ tự động thêm Phoenix LiveView vào dự án. Nếu bạn thêm thủ công, trong mix.exs
cần thêm:defp deps do [ {:phoenix_live_view, "~> 0.17.5"} ]end
mix deps.get
~> 0.17.5
có thể thay đổi theo thời điểm, bạn nên kiểm tra phiên bản mới nhất trên Hex.pm .# lib/liveview_example_web/live/counter_live.exdefmodule LiveviewExampleWeb.CounterLive do use Phoenix.LiveView
def mount(_params, _session, socket) do {:ok, assign(socket, count: 0)} end
def handle_event("increment", _value, socket) do {:noreply, assign(socket, count: socket.assigns.count + 1)} end
def render(assigns) do ~L""" <div> <h1>Count: <%= @count %></h1> <button phx-click="increment">Increment</button> </div> """ endend
Khi người dùng click vào nút "Increment", sự kiện phx-click="increment"
sẽ gửi lên server, và LiveView cập nhật số đếm ngay lập tức.
# lib/liveview_example_web/router.exdefmodule LiveviewExampleWeb.Router do use LiveviewExampleWeb, :router
live "/", LiveviewExampleWeb.CounterLiveend
mix phx.server
http://localhost:4000
, bạn sẽ thấy bộ đếm số hành động “Increment” được cập nhật ngay lập tức mà không cần tải lại trang.defmodule LiveviewExampleWeb.FormLive do use Phoenix.LiveView
def mount(_params, _session, socket) do {:ok, assign(socket, name: "")} end
def handle_event("update", %{"name" => name}, socket) do {:noreply, assign(socket, name: name)} end
def render(assigns) do ~L""" <div> <input type="text" phx-change="update" placeholder="Enter your name" /> <p>Hello, <%= @name %>!</p> </div> """ endend
live "/form", LiveviewExampleWeb.FormLive
phx-change="update"
gắn với việc gửi dữ liệu mới mỗi khi trường nhập liệu thay đổi, tạo ra trải nghiệm người dùng mượt mà và thời gian thực.Ưu điểm | Nhược điểm |
---|---|
⚡ Cập nhật giao diện thời gian thực mà không cần JS | 🧩 Tương tác client phức tạp hơn so với framework JS thuần |
🧠 Toàn quyền điều khiển UI từ Elixir, giảm thiểu lỗi JS | 📈 Server chịu tải cao khi có nhiều kết nối thời gian thực |
🛠 Tích hợp dễ dàng trong hệ sinh thái Phoenix | 🔄 Quản lý hành vi tương tác phức tạp đôi khi khó khăn |
🚀 Hiệu năng tối ưu cho các thao tác người dùng nhanh, thấp độ trễ | |