Laravel Livewire / PHP 中的延迟布尔值变化

Delay boolean changing in Laravel Livewire / PHP

我想在几秒钟后切换一个布尔值。我最初认为我可以将布尔值设置为 true(显示吐司)然后 sleep(2) 然后再次将布尔值设置为 false。但所有发生的事情(显然)睡眠被忽略,布尔值被切换为真然后立即为假,所以你甚至看不到它出现。

任何人都可以阐明这种情况如何/为什么发生以及如何克服它而不使用 JavaScript 吐司替代品?

public function store()
{
    $this->validate();
    $this->fileref->save();
    $this->show_toast = true; # Toast show
    sleep(2); # Wait...
    $this->show_toast = false; # Toast hide
}

根据开头的问题,这是我的解决方案,不求助于 Javascript toast 库,例如 NotyfToastr。我无意完全避免使用 Javascript。

话虽如此,通过调度一个浏览器事件 (server-side) 然后向我的组件添加一个侦听器 (server-side),我仍然能够主要使用 server-side & 一个简单的 @if-wrapped 通知 (html) 来呈现我的吐司通知,计时,然后删除它。

public function store()
{
    $this->validate();
    $this->fileref->save();
    $this->show_toast = true; # Toast show
    $this->dispatchBrowserEvent('fileStored');
}

然后,回到我的 Livewire 组件:

protected $listeners = ['eatToast' => 'hideToast'];

最后,唯一的Javascript部分:

document.addEventListener('fileStored', function () {
    setTimeout(() => {
        Livewire.emit('eatToast');
    }, 5000);
});

隐藏 toast 的最终方法(在 Livewire 组件内部):

public function hideToast() {
    $this->show_toast = false;
}