Обробка форм за допомогою `wire:click.prevent` у Livewire

Перекладено ШІ 3 Laravel News 02 червня, 2026

Чи знаєте ви, як директива `wire:click.prevent` може спростити ваш код у Livewire? У цій статті ми розглянемо, як ця директива запобігає стандартній поведінці браузера під час роботи з формами та інтерактивними інтерфейсами, створюючи плавний досвід для користувачів

Директива wire:click.prevent зупиняє стандартну поведінку браузера під час виконання методів компонентів Livewire. Цей модифікатор перешкоджає відправленню форм та переходу за посиланнями, що дозволяє уникнути перезавантаження сторінки під час взаємодії з користувачем.

При обробці відправлення форм або кліків по кнопках wire:click.prevent блокує стандартні дії браузера та виконує подію через Livewire. Це дозволяє створювати інтерактивні інтерфейси без перезавантаження сторінки чи спеціального JavaScript.

use Livewire\Component;
 
class UserSettings extends Component
{
    public $email = '';
    public $notifications = false;
 
    public function updateEmail()
    {
        $this->validate(['email' => 'required|email']);
 
        auth()->user()->update(['email' => $this->email]);
 
        session()->flash('message', 'Email оновлено');
    }
 
    public function render()
    {
        return view('livewire.user-settings');
    }
}
<form>
    <input type="email" wire:model="email">
    <button wire:click.prevent="updateEmail">Оновити Email</button>
</form>

Модифікатор .prevent викликає preventDefault() для подій браузера, зупиняючи відправлення форми і дозволяючи виконувати метод Livewire. Це дозволяє користувачам залишатися на тій же сторінці під час обробки їхніх даних.

Для інтерфейсів управління запасами wire:click.prevent обробляє оновлення статусу та редагування в рядку без порушення робочого процесу:

use Livewire\Component;
use App\Models\Product;
 
class ProductManager extends Component
{
    public $products;
    public $editingId = null;
    public $editingName = '';
 
    public function mount()
    {
        $this->products = Product::all();
    }
 
    public function toggleStatus($productId)
    {
        $product = Product::find($productId);
        $product->active = !$product->active;
        $product->save();
 
        $this->products = Product::all();
    }
 
    public function startEditing($productId)
    {
        $this->editingId = $productId;
        $this->editingName = Product::find($productId)->name;
    }
 
    public function saveEdit()
    {
        Product::find($this->editingId)->update(['name' => $this->editingName]);
        $this->editingId = null;
        $this->products = Product::all();
    }
 
    public function render()
    {
        return view('livewire.product-manager');
    }
}
<div>
    @foreach($products as $product)
        <div class="product-row">
            <input type="checkbox"
                   wire:click.prevent="toggleStatus({{ $product->id }})"
                   {{ $product->active ? 'checked' : '' }}>
 
            @if($editingId === $product->id)
                <input type="text" wire:model="editingName">
                <button wire:click.prevent="saveEdit">Зберегти</button>
            @else
                <span wire:click.prevent="startEditing({{ $product->id }})">
                    {{ $product->name }}
                </span>
            @endif
        </div>
    @endforeach
</div>

Цей патерн працює з різними HTML-елементами, включаючи посилання, де модифікатор запобігає переходу під час виконання методів компонентів:

<a href="#" wire:click.prevent="performAction">Виконати дію</a>

Директива інтегрується з системою валідації Livewire та іншими функціями, такими як стан завантаження. Валідація на стороні сервера відбувається перед обробкою дій, а індикатори завантаження з'являються під час виконання методів.

wire:click.prevent зменшує потребу в обробці подій JavaScript, зберігаючи при цьому чутливі користувацькі інтерфейси. Вона обробляє звичні патерни взаємодії через методи PHP, замість фронтенд-скриптів.

Популярні

Інше, що варто прочитати

15 Оновлено 01 червня, 2026

Простий пакет RabbitMQ для Laravel

Вам цікаво дізнатися, як спростити інтеграцію RabbitMQ у вашому Laravel-додатку? У нашій статті ми розглянемо пакет Simple RabbitMQ, який дозволяє легко налаштувати багатозʼєднання, публікувати повідомлення та обробляти черги за допомогою простого синтаксису. Читайте далі, щоб дізнатися більше!

10 Оновлено 01 червня, 2026

Генерація документації в Laravel за допомогою штучного інтелекту

Docudoodle — це потужний пакет для генерації документації в Laravel, який допомагає легко аналізувати вашу кодову базу та створювати документацію за допомогою обраного вами AI. Чи готові ви дізнатися, як цей інструмент може спростити вашу роботу з документуванням коду? Читайте далі!

83 Оновлено 01 червня, 2026

Все, що потрібно знати про Laravel 13

Laravel 13 вийде в березні 2026 року й вимагатиме мінімум PHP 8.3. Хочете дізнатися, як PHP‑атрибути для моделей, нові налаштування черг і метод Cache::touch() вплинуть на вашу розробку?