Мое приложение LiveView устанавливает некоторые начальные состояния (например, button_label) в функции mount
. Шаблон, по-видимому, перемонтируется при прохождении некоторых сообщений.
В следующем примере метка кнопки изначально установлена на «Нажать для запуска», а когда кнопка нажата, она успешно меняется на «Выполняется ...», а затем «Все еще в прогрессе». Однако mount
автоматически запускается снова, и метка возвращается к «Нажмите для запуска». Требуемое поведение заключается в том, чтобы метка оставалась «Все еще в процессе» до тех пор, пока не будет получено другое сообщение, указывающее, что процесс завершается позднее в процессе.
Что вызывает повторную установку и как я могу остановить это?
def mount(_params, _session, socket) do
{:ok, assign(socket, button_label: "Click to run")}
def handle_event("run_process", value, socket) do
live_view = self()
Task.start(fn ->
result = "Some tasks to run here"
send(live_view, {:in_progress, result})
end)
{:noreply, assign(socket, button_label: "Running..")}
def handle_info({:in_progress, result}, socket) do
IO.inspect("result", label: "in_progress ++")
{:noreply, assign(socket, button_label: "Still in progress")}
end
[Leex]
<button phx-click="run_process"><%= @button_label %> </button>