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

Директива wire:cloak

Директива wire:cloak решает проблему мерцания (FOUC - Flash of Unstyled Content) при первоначальной загрузке страницы с Livewire-компонентами. Она вешается на элемент, который должен быть скрыт до завершения инициализации Livewire. Как только JavaScript-фреймворк полностью загружен и готов к работе, он автоматически убирает атрибут wire:cloak или добавляет CSS-класс, делая элемент видимым. Это позволяет избежать отображения данных в "сыром" виде, например, фигурных скобок {{ $text }} или необработанных Blade-конструкций, до того, как они будут преобразованы в фактические данные.

Для правильной работы директивы, необходимо определить CSS-правило, которое будет скрывать элементы с атрибутом wire:cloak или классом wire-cloak. Обычно это делается в глобальном стиле и выглядит как [wire\:cloak], .wire-cloak { display: none; }. По умолчанию Livewire не добавляет стили автоматически, поэтому эту настройку нужно выполнить вручную.

Синтаксис

Директива записывается как атрибут HTML-элемента без значения:

<div wire:cloak> {{ $content }} </div>

Либо можно использовать альтернативный синтаксис в виде CSS-класса:

<div class="wire-cloak"> {{ $content }} </div>

Пример

Давайте создадим компонент, который отображает приветственное сообщение. Без использования wire:cloak при медленном интернете пользователь на мгновение увидит необработанный код {{ $message }}. Исправим это, добавив директиву:

<?php namespace App\Livewire; use Livewire\Component; class Greeting extends Component { public $message = 'Hello, Livewire!'; public function render() { return view('livewire.greeting'); } } ?>
<div wire:cloak> <h1>{{ $message }}</h1> </div>

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

<div> <h1>Hello, Livewire!</h1> </div>

Пример

Покажем использование wire:cloak на более сложном примере со списком элементов. В момент загрузки страницы список может отображаться с задержкой, поэтому скроем его контейнер до полной готовности Livewire:

<?php namespace App\Livewire; use Livewire\Component; class ItemList extends Component { public $items = ['a', 'b', 'c', 'd', 'e']; public function render() { return view('livewire.item-list'); } } ?>
<ul wire:cloak> @foreach ($items as $item) <li>{{ $item }}</li> @endforeach </ul>

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

<ul> <li>a</li> <li>b</li> <li>c</li> <li>d</li> <li>e</li> </ul>

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

  • директиву wire:loading,
    которая управляет отображением элементов во время выполнения запроса
  • директиву wire:dirty,
    которая отслеживает изменения состояния полей формы
  • директиву wire:text,
    которая обновляет текстовое содержимое элемента при изменении данных
  • директиву wire:init,
    которая выполняет метод сразу после инициализации компонента
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить