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

Директива wire:click.renderless

Директива wire:click.renderless вешается на HTML-элемент и вызывает указанный публичный метод компонента при клике. В отличие от обычной директивы wire:click, модификатор renderless предотвращает автоматическую перерисовку шаблона компонента после выполнения метода. Это полезно, когда метод выполняет побочные действия (например, запись в базу данных, отправку уведомлений или работу с сессией) и не изменяет данные, влияющие на отображение, либо изменения не нужно показывать сразу.

Синтаксис

<button wire:click.renderless="methodName"> text </button>

В значение директивы передаётся имя публичного метода компонента. Метод может принимать параметры.

Пример

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

<?php namespace AppLivewire; use LivewireComponent; class Counter extends Component { public $num = 0; public function inc() { $this->num++; } public function render() { return view('livewire.counter'); } } ?>
<button wire:click.renderless="inc"> + </button> <span>{{ $num }}</span>

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

<button> + </button> <span>0</span>

Несмотря на то, что значение свойства $num увеличивается при каждом клике, на экране всегда отображается 0, потому что перерисовка не происходит.

Пример

Передадим параметры в метод, который записывает данные в сессию без обновления страницы:

<?php namespace AppLivewire; use LivewireComponent; use IlluminateSupportFacadesSession; class Logger extends Component { public function logAction($action) { Session::push('log', $action); } public function render() { return view('livewire.logger'); } } ?>
<button wire:click.renderless="logAction('click')"> Log Click </button>

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

<button> Log Click </button>

При клике на кнопку метод logAction добавляет запись в сессию, но страница остаётся без изменений. Это эффективно для действий, не влияющих на отображение.

Пример

Используем wire:click.renderless для запуска фонового процесса, например, отправки уведомления:

<?php namespace AppLivewire; use LivewireComponent; use IlluminateSupportFacadesNotification; use AppNotificationsUserNotification; class Notifier extends Component { public function sendNotification() { $user = auth()->user(); Notification::send($user, new UserNotification()); } public function render() { return view('livewire.notifier'); } } ?>
<button wire:click.renderless="sendNotification"> Send Notification </button>

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

<button> Send Notification </button>

Нажатие кнопки отправляет уведомление пользователю, не вызывая обновление интерфейса.

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

  • директиву wire:click,
    которая вызывает метод с автоматической перерисовкой
  • директиву wire:click.prevent,
    которая отменяет действие браузера по умолчанию при клике
  • директиву wire:click.delay,
    которая задерживает выполнение метода при клике
  • директиву wire:click.debounce,
    которая ограничивает частоту вызовов метода при клике
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить