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

Атрибут #[Defer]

Атрибут #[Defer] используется для маркировки публичных свойств компонента Livewire, изменения которых не должны немедленно отправляться на сервер. Вместо этого их значения накапливаются на клиенте и передаются вместе со следующим действием, запускающим сетевой запрос. Это особенно эффективно при работе с полями ввода, которые часто изменяются, но не требуют мгновенной реакции сервера.

Синтаксис

<?php namespace AppLivewire; use LivewireComponent; use LivewireAttributesDefer; class ExampleComponent extends Component { #[Defer] public $propertyName = 'default value'; public function render() { return view('livewire.example-component'); } } ?>

Атрибут #[Defer] импортируется из пространства имён LivewireAttributesDefer.

Пример

Рассмотрим компонент с полем поиска. Обычно при вводе каждого символа происходит запрос на сервер, что может создавать излишнюю нагрузку. С атрибутом #[Defer] мы откладываем отправку данных до момента отправки формы:

<?php namespace AppLivewire; use LivewireComponent; use LivewireAttributesDefer; class SearchComponent extends Component { #[Defer] public $query = ''; public $results = []; public function search() { // Simulate search using deferred property $this->results = $this->query !== '' ? ['result 1', 'result 2', 'result 3'] : []; } public function render() { return view('livewire.search-component'); } } ?>
<div> <input type="text" wire:model.defer="query" placeholder="Search..."> <button wire:click="search">Search</button> <ul> @foreach ($results as $result) <li>{{ $result }}</li> @endforeach </ul> </div>

Пример

Атрибут #[Defer] также полезен для свойств, которые изменяются во время сложных пользовательских взаимодействий, например, при перетаскивании элементов. Вместо множества мелких обновлений значение будет отправлено единожды:

<?php namespace AppLivewire; use LivewireComponent; use LivewireAttributesDefer; class DraggableComponent extends Component { #[Defer] public $position = 0; public $savedPosition = 0; public function savePosition() { $this->savedPosition = $this->position; } public function render() { return view('livewire.draggable-component'); } } ?>
<div> <div wire:click="$set('position', position + 10)" style="cursor: pointer; padding: 10px; background: #f0f0f0;" > Move right (+10) </div> <div wire:click="$set('position', position - 10)" style="cursor: pointer; padding: 10px; background: #f0f0f0;" > Move left (-10) </div> <p>Current position: {{ $position }}</p> <p>Saved position: {{ $savedPosition }}</p> <button wire:click="savePosition">Save position</button> </div>

Здесь позиция накапливается при каждом клике, но отправляется на сервер только при нажатии кнопки сохранения.

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

  • атрибут #[Computed],
    который кеширует результат выполнения метода
  • атрибут #[Locked],
    который запрещает изменение свойства на клиенте
  • атрибут #[Url],
    который синхронизирует свойство с параметрами URL
  • атрибут #[Session],
    который сохраняет свойство в сессии
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить