【问题标题】:Livewire - Force update view from componentLivewire - 从组件强制更新视图
【发布时间】:2021-02-18 19:29:32
【问题描述】:

我有一个 Livewire 组件,我想用它做一些异步操作。但是我不知道如何在需要时强制刷新更新。

为了说明问题,请查看下面的示例。

想像我正在尝试创建一个秒表。我将单击一个按钮来启动秒表,每次 $counter 更改时,我都想将值发送到我的视图。

class MyComponent extends Component {
   public $counter = 0;

   public function startTimer() {
       for ($i = 0; $i < 10; $i++) {
           $this->counter = $this->counter + 1;
           // I want to tell "send data to view/update data in view here"

           sleep(3);   
       }      
   } 
}
<button wire:click="startTimer">Start</button>
<h1>{{ $counter }}</h1>

这是一个虚拟的例子,我不想用轮询来做。

有没有办法告诉组件 $this-&gt;updateDataInView() 之类的东西?

【问题讨论】:

    标签: php laravel laravel-livewire


    【解决方案1】:

    在 Livewire 中,您可以使用魔术方法 $refresh 手动刷新视图。

    选项 1,在视图中

    <div>
        <button wire:click="$refresh">Reload Component</button>
    </div>
    

    另请参阅blog post

    选项 2,在组件类中

    protected $listeners = [
        'refreshComponent' => '$refresh'
    ];
    

    当然,这里你需要发出refreshComponent 事件。

    有一个Github discussion围绕这个话题。

    【讨论】:

    • 我尝试了选项 2,并在 for 循环中尝试了 $this-&gt;emit('refreshComponent'),但是它不会为我更新视图中的数据。在循环结束时,我收到一个更新(最终值)。它对你有用吗?
    猜你喜欢
    • 2021-05-11
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 2021-10-21
    • 1970-01-01
    • 2022-12-18
    相关资源
    最近更新 更多