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

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

Директива wire:click.throttle является модификатором директивы wire:click. Она ограничивает частоту вызова метода компонента при кликах по элементу. В значение передается имя публичного метода компонента, а после точки указывается время задержки в миллисекундах. В течение указанного интервала времени метод будет вызван только один раз, все промежуточные клики будут проигнорированы.

Синтаксис

<button wire:click.throttle="methodName"> text </button> <button wire:click.throttle.2000ms="methodName"> text </button>

Пример

Давайте создадим компонент, в котором по клику на кнопку увеличивается счетчик $num. Ограничим вызов метода inc интервалом в 1 секунду:

<?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.throttle.1000ms="inc"> + </button> <span>{{ $num }}</span>

В этом примере метод inc будет вызван не чаще одного раза в секунду, даже если пользователь будет часто кликать по кнопке.

Пример

Давайте передадим в метод параметр и используем стандартное значение задержки 2000 мс. Обратите внимание, что в Livewire можно указать задержку как с суффиксом ms, так и без него:

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

Результат: при быстрых кликах счетчик увеличивается только раз в две секунды, пропуская промежуточные нажатия.

Пример

Используем wire:click.throttle для ограничения отправки данных на сервер. Пусть метод сохраняет текст из поля ввода, но не чаще раза в 500 мс:

<?php namespace AppLivewire; use LivewireComponent; class Saver extends Component { public $text = ''; public $saved = []; public function save() { $this->saved[] = $this->text; } public function render() { return view('livewire.saver'); } } ?>
<input type="text" wire:model="text"> <button wire:click.throttle.500ms="save"> Save </button> <ul> @foreach ($saved as $item) <li>{{ $item }}</li> @endforeach </ul>

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

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

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