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

Атрибут Renderless

Атрибут #[Renderless] применяется к классу компонента Livewire и указывает, что компонент не использует шаблон для рендеринга. Вместо этого метод render должен возвращать массив или объект с данными, которые будут переданы в родительский компонент или использованы для API-ответов. Это полезно для создания компонентов-прослоек, которые обрабатывают логику, но не выводят HTML напрямую.

Синтаксис

<?php namespace App\Livewire; use Livewire\Component; use Livewire\Attributes\Renderless; #[Renderless] class ComponentName extends Component { public function render() { return [ 'key' => 'value', ]; } } ?>

Пример

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

<?php namespace App\Livewire; use Livewire\Component; use Livewire\Attributes\Renderless; #[Renderless] class Calculator extends Component { public $a = 10; public $b = 5; public $operation = 'add'; public function render() { $result = match($this->operation) { 'add' => $this->a + $this->b, 'sub' => $this->a - $this->b, 'mul' => $this->a * $this->b, 'div' => $this->a / $this->b, default => 0, }; return [ 'result' => $result, 'a' => $this->a, 'b' => $this->b, 'operation' => $this->operation, ]; } } ?>

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

[ 'result' => 15, 'a' => 10, 'b' => 5, 'operation' => 'add', ]

Пример

Используем #[Renderless] для компонента, который возвращает данные пользователя:

<?php namespace App\Livewire; use Livewire\Component; use Livewire\Attributes\Renderless; use App\Models\User; #[Renderless] class UserData extends Component { public $userId; public function render() { $user = User::find($this->userId); return [ 'id' => $user->id, 'name' => $user->name, 'email' => $user->email, 'created_at' => $user->created_at->format('Y-m-d'), ]; } } ?>

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

[ 'id' => 1, 'name' => 'John Doe', 'email' => 'john@example.com', 'created_at' => '2025-01-15', ]

Пример

Компонент без шаблона может использоваться для API-подобных ответов в сочетании с другими атрибутами:

<?php namespace App\Livewire; use Livewire\Component; use Livewire\Attributes\Renderless; use Livewire\Attributes\Validate; #[Renderless] class ApiComponent extends Component { #[Validate('required|min:3')] public $search = ''; public function render() { $items = ['apple', 'banana', 'cherry']; $filtered = array_filter($items, function($item) { return str_contains($item, $this->search); }); return [ 'status' => 'success', 'data' => array_values($filtered), 'count' => count($filtered), ]; } } ?>

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

[ 'status' => 'success', 'data' => ['banana'], 'count' => 1, ]

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

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