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

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

Директива wire:model.throttle является модификатором директивы wire:model. Она ограничивает частоту отправки запросов на сервер при изменении значения поля ввода. По умолчанию wire:model отправляет запрос при каждом событии ввода (input), что может создавать излишнюю нагрузку при интенсивном наборе текста. Модификатор throttle позволяет задать минимальный интервал между обновлениями, что особенно полезно для полей поиска, фильтрации или других форм с частым вводом данных.

Синтаксис

<input type="text" wire:model.throttle="propertyName"> <input type="text" wire:model.throttle.500ms="propertyName"> <input type="text" wire:model.throttle.2s="propertyName">

По умолчанию интервал составляет 150 миллисекунд. Вы можете указать свое значение в миллисекундах с суффиксом ms или в секундах с суффиксом s.

Пример

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

<?php namespace App\Livewire; use Livewire\Component; use Illuminate\Support\Collection; class Search extends Component { public $query = ''; public $results = []; public function updatedQuery() { if (strlen($this->query) < 2) { $this->results = []; return; } $items = ['apple', 'banana', 'cherry', 'date', 'elderberry']; $this->results = array_filter($items, function($item) { return str_contains($item, strtolower($this->query)); }); } public function render() { return view('livewire.search'); } } ?>
<div> <input type="text" wire:model.throttle.500ms="query" placeholder="Search..."> <ul> @foreach ($results as $result) <li>{{ $result }}</li> @endforeach </ul> </div>

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

<input type="text" placeholder="Search..." value="a"> <ul> <li>apple</li> <li>banana</li> <li>date</li> </ul>

Пример

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

<?php namespace App\Livewire; use Livewire\Component; class Comment extends Component { public $text = ''; public $saved = false; public function updatedText() { $this->saved = false; if (strlen($this->text) > 5) { $this->saveComment(); } } public function saveComment() { // Logic for saving comment $this->saved = true; } public function render() { return view('livewire.comment'); } } ?>
<div> <textarea wire:model.throttle.1s="text" placeholder="Write comment..."></textarea> @if ($saved) <span>Comment saved!</span> @endif <p>Length: {{ strlen($text) }}</p> </div>

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

<textarea placeholder="Write comment...">hello</textarea> <span>Comment saved!</span> <p>Length: 5</p>

Пример

Давайте используем значение по умолчанию 150 мс для поля фильтрации:

<?php namespace App\Livewire; use Livewire\Component; use Illuminate\Support\Collection; class Filter extends Component { public $filter = ''; public $items = []; public function updatedFilter() { $data = ['article', 'book', 'category', 'document', 'file']; if (empty($this->filter)) { $this->items = $data; return; } $this->items = array_filter($data, function($item) { return str_contains($item, strtolower($this->filter)); }); } public function mount() { $this->items = ['article', 'book', 'category', 'document', 'file']; } public function render() { return view('livewire.filter'); } } ?>
<div> <input type="text" wire:model.throttle="filter" placeholder="Filter items..."> <ul> @foreach ($items as $item) <li>{{ $item }}</li> @endforeach </ul> </div>

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

<input type="text" placeholder="Filter items..." value="art"> <ul> <li>article</li> </ul>

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

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