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

Однофайловый компонент

Однофайловый компонент (Single-File Component, SFC) - это подход в Livewire, при котором PHP-класс компонента и его Blade-шаблон находятся в одном файле с расширением .blade.php. Такой формат упрощает организацию кода и удобен для небольших компонентов. В SFC-компоненте логика и представление расположены в одном месте, что облегчает их поддержку и перенос.

Структура однофайлового компонента

Однофайловый компонент содержит PHP-класс, который наследуется от LivewireComponent, и Blade-шаблон, который может быть определён через метод render с возвратом строки шаблона или через специальную секцию внутри файла.

<?php namespace App\Livewire; use Livewire\Component; class UserProfile extends Component { public $name = 'John Doe'; public $email = 'john@example.com'; public function updateName($newName) { $this->name = $newName; } public function render() { return <<<'BLADE' <div> <h2>{{ $name }}</h2> <p>{{ $email }}</p> <button wire:click="updateName('Jane Doe')"> Update Name </button> </div> BLADE; } } ?>

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

<div> <h2>John Doe</h2> <p>john@example.com</p> <button> Update Name </button> </div>

Создание однофайлового компонента

Для создания однофайлового компонента используйте команду Artisan с флагом --inline:

php artisan make:livewire UserProfile --inline

После выполнения команды будет создан файл app/Livewire/UserProfile.php с встроенным шаблоном.

Использование свойства на примере

Давайте создадим однофайловый компонент, который отображает и изменяет число с помощью публичного свойства $count:

<?php namespace App\Livewire; use Livewire\Component; class Counter extends Component { public $count = 0; public function increment() { $this->count++; } public function render() { return <<<'BLADE' <div> <h3>Count: {{ $count }}</h3> <button wire:click="increment"> Increment </button> </div> BLADE; } } ?>

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

<div> <h3>Count: 1</h3> <button> Increment </button> </div>

Работа с массивами

Рассмотрим пример компонента, который выводит список элементов массива и добавляет новые значения:

<?php namespace App\Livewire; use Livewire\Component; class UserList extends Component { public $users = ['Alice', 'Bob', 'Charlie']; public function addUser($name) { $this->users[] = $name; } public function render() { return <<<'BLADE' <div> <ul> @foreach ($users as $user) <li>{{ $user }}</li> @endforeach </ul> <button wire:click="addUser('Dave')"> Add User </button> </div> BLADE; } } ?>

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

<div> <ul> <li>Alice</li> <li>Bob</li> <li>Charlie</li> </ul> <button> Add User </button> </div>

Пример с условиями

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

<?php namespace App\Livewire; use Livewire\Component; class StatusDisplay extends Component { public $isActive = true; public function toggleStatus() { $this->isActive = !$this->isActive; } public function render() { return <<<'BLADE' <div> @if ($isActive) <span class="active">Status: Active</span> @else <span class="inactive">Status: Inactive</span> @endif <button wire:click="toggleStatus"> Toggle </button> </div> BLADE; } } ?>

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

<div> <span class="active">Status: Active</span> <button> Toggle </button> </div>

Передача параметров в метод

Передадим в метод компонента параметр для изменения свойства:

<?php namespace App\Livewire; use Livewire\Component; class PriceChanger extends Component { public $price = 100; public function changePrice($percent) { $this->price += $this->price * ($percent / 100); } public function render() { return <<<'BLADE' <div> <p>Price: {{ $price }}</p> <button wire:click="changePrice(10)"> Increase by 10% </button> <button wire:click="changePrice(-10)"> Decrease by 10% </button> </div> BLADE; } } ?>

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

<div> <p>Price: 110</p> <button> Increase by 10% </button> <button> Decrease by 10% </button> </div>

Преимущества использования

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

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

  • класс Component,
    от которого наследуются все компоненты Livewire
  • метод render,
    который возвращает шаблон компонента
  • раздел многофайловые компоненты,
    где логика и шаблон разделены
  • публичные свойства public-prop,
    которые используются в SFC-компонентах
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить