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

Директива wire:click.once

Директива wire:click.once вешается на HTML-элемент и вызывает указанный публичный метод компонента при клике. Главное отличие от обычной wire:click в том, что после первого успешного вызова метода, директива блокируется и последующие клики по элементу не приводят к вызову метода. Это полезно для действий, которые должны выполняться только один раз, например, отправка формы с уникальным токеном или активация промокода.

Синтаксис

<button wire:click.once="methodName"> text </button>

В значении передаётся имя публичного метода компонента, который будет вызван при первом клике.

Пример

Давайте реализуем кнопку, которая начисляет бонус пользователю, но только один раз. Свойство $bonusActivated будет показывать, был ли активирован бонус:

<?php namespace App\Livewire; use Livewire\Component; class BonusActivator extends Component { public $bonusActivated = false; public $message = ''; public function activateBonus() { $this->bonusActivated = true; $this->message = 'Бонус активирован!'; } public function render() { return view('livewire.bonus-activator'); } } ?>
<div> <button wire:click.once="activateBonus"> Активировать бонус </button> @if ($bonusActivated) <span>{{ $message }}</span> @endif </div>

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

<div> <button> Активировать бонус </button> <span>Бонус активирован!</span> </div>

При повторном клике метод activateBonus не вызывается, и сообщение остаётся без изменений.

Пример

Директива также работает с модификаторами. Например, комбинация с .prevent отменяет действие браузера по умолчанию при первом клике:

<?php namespace App\Livewire; use Livewire\Component; class FormSubmitter extends Component { public $submitted = false; public $result = ''; public function submitForm() { $this->submitted = true; $this->result = 'Форма отправлена один раз'; } public function render() { return view('livewire.form-submitter'); } } ?>
<form wire:submit.prevent.once="submitForm"> <input type="text" placeholder="Введите данные"> <button type="submit"> Отправить </button> @if ($submitted) <p>{{ $result }}</p> @endif </form>

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

<form> <input type="text" placeholder="Введите данные"> <button type="submit"> Отправить </button> <p>Форма отправлена один раз</p> </form>

Повторные отправки формы игнорируются, так как директива срабатывает только один раз.

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

  • директиву wire:click,
    которая вызывает метод при каждом клике
  • директиву wire:click.prevent,
    которая отменяет действие браузера по умолчанию
  • директиву wire:click.delay,
    которая задерживает вызов метода
  • директиву wire:click.debounce,
    которая ограничивает частоту вызовов метода
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить