РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
75 of 274 menu

Директива wire:poll

Директива wire:poll вешается на HTML-элемент и автоматически выполняет запрос к серверу через указанный интервал времени. В значение передаётся время в миллисекундах или имя метода компонента. После каждого опроса Livewire обновляет шаблон компонента, отображая актуальные данные.

Синтаксис

<div wire:poll="methodName"> {{ $data }} </div>

Базовый синтаксис с указанием интервала:

<div wire:poll.5000ms="methodName"> {{ $data }} </div>

Пример

Давайте создадим компонент, который автоматически обновляет текущее время каждые 3 секунды:

<?php namespace AppLivewire; use LivewireComponent; class Clock extends Component { public $time; public function mount() { $this->time = now()->format('H:i:s'); } public function updateTime() { $this->time = now()->format('H:i:s'); } public function render() { return view('livewire.clock'); } } ?>
<div wire:poll.3000ms="updateTime"> Current time: {{ $time }} </div>

Результат выполнения кода:

<div> Current time: 15:23:47 </div>

В этом примере метод updateTime будет вызываться каждые 3 секунды, обновляя отображаемое время.

Пример

Давайте создадим опрос без указания метода, используя только интервал. В этом случае компонент будет полностью перерендериваться:

<?php namespace AppLivewire; use LivewireComponent; class Status extends Component { public $status = 'online'; public $users = 0; public function mount() { $this->users = rand(10, 50); } public function render() { $this->users = rand(10, 50); return view('livewire.status'); } } ?>
<div wire:poll.2000ms> Status: {{ $status }} Users online: {{ $users }} </div>

Результат выполнения кода:

<div> Status: online Users online: 27 </div>

В этом случае каждые 2 секунды вызывается метод render, который обновляет данные о количестве пользователей.

Пример

Давайте используем директиву wire:poll с модификатором .keep-alive, который предотвращает закрытие соединения между опросами:

<?php namespace AppLivewire; use LivewireComponent; class Notifications extends Component { public $notifications = []; public $count = 0; public function mount() { $this->count = 0; $this->notifications = $this->generateNotifications(); } public function generateNotifications() { $messages = ['New message received', 'System update available', 'User logged in']; return array_rand(array_flip($messages), rand(1, 2)); } public function checkNotifications() { $this->count++; $this->notifications = $this->generateNotifications(); } public function render() { return view('livewire.notifications'); } } ?>
<div wire:poll.keep-alive.5000ms="checkNotifications"> <h3>Notifications ({{ $count }})</h3> <ul> @foreach ($notifications as $notification) <li>{{ $notification }}</li> @endforeach </ul> </div>

Результат выполнения кода:

<div> <h3>Notifications (3)</h3> <ul> <li>New message received</li> <li>User logged in</li> </ul> </div>

Модификатор .keep-alive оптимизирует производительность при частых опросах, сохраняя соединение открытым.

Смотрите также

  • директиву wire:poll.visible,
    которая запускает опрос только когда элемент виден
  • директиву wire:load,
    которая вызывает метод при загрузке компонента
  • директиву wire:init,
    которая выполняет код при инициализации компонента
  • директиву wire:change,
    которая реагирует на изменение значения поля ввода
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить