Laravel-livewire:为什么触发事件会执行 render() 方法?

这是 Laravel 的 Livewire 框架


HTML:


<button wire:click="$emit('postAdded')">

PHP:


protected $listeners = ['postAdded' => 'showPostAddedMessage'];


public function showPostAddedMessage()

{

    // Do stuff

}


public function render()

{

    return view('livewire.index');

}

单击按钮会调用 showPostAddedMessage(),然后调用 render()。如何在不调用 render() 的情况下监听事件?


三国纷争
浏览 98回答 4
4回答

阿晨1998

我遇到过同样的问题。就我而言, render() 方法正在关闭我的父模式框。我刚刚在模态 div 中添加了“wire:ignore”。Livewire 每当调用 render() 方法时都会忽略该 div

幕布斯7119047

我遇到了这种黑客:如果您关心的是不重新渲染视图,您可以从render(). DOM 不会更新。我的情况:我有一个不应该渲染任何内容的下载方法。public function download(){&nbsp; &nbsp;$this->skipRender();}public function render(){&nbsp; &nbsp; if($this->shouldSkipRender) {&nbsp; &nbsp; &nbsp; &nbsp; return '';&nbsp; &nbsp; }&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; return view("xxxxx");}只要我没有遗漏任何东西,这对我有用。

繁星coding

这就是 Livewire 的工作原理。每当您更改任何内容/触发任何事件时。该组件将刷新。据我所知,livewire 没有办法阻止它,除非你将 die() 放在 showPOstAddedMessage 函数中,这将是一种非常奇怪的解决方法。

慕哥9229398

对于现在遇到此问题的任何人,Livewire 3 中的新功能可以解决此问题。Livewire 3Component具有skipRender()可以在执行事件处理程序逻辑后调用的函数。#[On('some_event')]public function handleSomeEvent(){    -- event code here    $this->skipRender();}顺便说一句,在文档中,还有一个#[Renderless]属性可以添加到方法中,以指示它们不应导致组件重新渲染。#[On]但是,我发现这对也具有侦听事件属性的方法没有影响。
打开App,查看更多内容
随时随地看视频慕课网APP