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

Атрибут Computed

Атрибут Computed используется для маркировки метода компонента как вычисляемого свойства. Такой метод выполняется только один раз за рендеринг, а результат кешируется. При повторном обращении к методу в рамках одного рендеринга будет возвращено кешированное значение. Это особенно полезно для ресурсоёмких операций, например, запросов к базе данных или сложных вычислений.

Синтаксис

<?php use Livewire\Attributes\Computed; use Livewire\Component; class UserComponent extends Component { #[Computed] public function fullName() { // Resource-intensive logic return $this->firstName . ' ' . $this->lastName; } } ?>

Атрибут применяется к методу, который должен возвращать вычисляемое значение. Метод не должен принимать обязательные параметры. Результат кешируется на время текущего запроса к компоненту.

Пример

Рассмотрим компонент, который отображает список пользователей и их полные имена. Полное имя вычисляется из имени и фамилии с помощью метода fullName.

<?php namespace App\Livewire; use Livewire\Attributes\Computed; use Livewire\Component; use App\Models\User; class UserList extends Component { public function render() { return view('livewire.user-list'); } #[Computed] public function fullName() { // Simulate heavy operation $user = User::find(1); return $user->name . ' ' . $user->surname; } } ?>
<div> <h3>User Info</h3> <p>Full name: {{ $this->fullName() }}</p> <p>Full name: {{ $this->fullName() }}</p> <p>Full name: {{ $this->fullName() }}</p> </div>

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

<div> <h3>User Info</h3> <p>Full name: John Doe</p> <p>Full name: John Doe</p> <p>Full name: John Doe</p> </div>

Несмотря на три обращения к методу fullName, запрос к базе данных выполнится только один раз. Остальные вызовы вернут кешированное значение.

Пример с зависимостями

Кеш вычисляемого свойства автоматически сбрасывается, когда изменяются свойства, от которых оно зависит. В данном примере при изменении $firstName или $lastName метод fullName будет выполнен заново.

<?php namespace App\Livewire; use Livewire\Attributes\Computed; use Livewire\Component; class UserProfile extends Component { public $firstName = 'John'; public $lastName = 'Doe'; #[Computed] public function fullName() { return $this->firstName . ' ' . $this->lastName; } public function updateName() { $this->firstName = 'Jane'; } public function render() { return view('livewire.user-profile'); } } ?>
<div> <p>Full name: {{ $this->fullName() }}</p> <button wire:click="updateName">Update First Name</button> </div>

После нажатия на кнопку свойство $firstName изменится на 'Jane', что приведёт к пересчёту вычисляемого свойства, и отобразится новое имя.

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

  • атрибут On,
    который определяет обработчик события для компонента
  • атрибут Validate,
    который задаёт правила валидации для свойств
  • атрибут Rule,
    который применяет правило валидации к конкретному свойству
  • атрибут Url,
    который синхронизирует свойство с параметром URL
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить