Метод skipMount
Метод skipMount класса Component позволяет пропустить выполнение метода mount при монтировании компонента. Метод должен возвращать true для пропуска монтирования или false для его выполнения. Это полезно, когда нужно предотвратить инициализацию компонента при определенных условиях, например, при отсутствии необходимых данных в сессии или при перенаправлении.
Синтаксис
<?php
namespace AppLivewire;
use LivewireComponent;
class ExampleComponent extends Component
{
public function mount()
{
// Инициализация компонента
}
public function skipMount()
{
return false; // или true для пропуска
}
public function render()
{
return view('livewire.example-component');
}
}
?>
Пример
Давайте создадим компонент, который будет пропускать монтирование, если пользователь не авторизован:
<?php
namespace AppLivewire;
use LivewireComponent;
use IlluminateSupportFacadesAuth;
class ProfileComponent extends Component
{
public $userId;
public $userData;
public function mount($userId)
{
$this->userId = $userId;
$this->userData = [
'name' => 'John Doe',
'email' => 'john@example.com'
];
}
public function skipMount()
{
return !Auth::check();
}
public function render()
{
return view('livewire.profile-component');
}
}
?>
<div>
@if($userData)
<h2>{{ $userData['name'] }}</h2>
<p>{{ $userData['email'] }}</p>
@else
<p>Please login to view profile</p>
@endif
</div>
Результат выполнения кода для неавторизованного пользователя:
<div>
<p>Please login to view profile</p>
</div>
Пример
Давайте создадим компонент с формой, которая пропускает монтирование, если данные уже были отправлены ранее:
<?php
namespace AppLivewire;
use LivewireComponent;
use IlluminateSupportFacadesSession;
class ContactForm extends Component
{
public $name;
public $email;
public $message;
public $submitted = false;
public function mount()
{
$this->name = old('name', '');
$this->email = old('email', '');
$this->message = old('message', '');
}
public function skipMount()
{
return Session::has('form_submitted');
}
public function submit()
{
Session::put('form_submitted', true);
$this->submitted = true;
}
public function render()
{
return view('livewire.contact-form');
}
}
?>
<div>
@if($submitted)
<p>Thank you for your message!</p>
@else
<form wire:submit="submit">
<input type="text" wire:model="name" placeholder="Name">
<input type="email" wire:model="email" placeholder="Email">
<textarea wire:model="message" placeholder="Message"></textarea>
<button type="submit">Send</button>
</form>
@endif
</div>
Результат выполнения кода после отправки формы:
<div>
<p>Thank you for your message!</p>
</div>
Смотрите также
-
метод
mount,
который выполняет инициализацию компонента при создании -
метод
boot,
который выполняется до метода mount -
метод
booted,
который выполняется после метода mount -
метод
skipRender,
который позволяет пропустить рендеринг компонента