为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
三国纷争 2023-10-01 16:07:21
这是 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() 的情况下监听事件?
查看完整描述

4 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

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



查看完整回答
反对 回复 2023-10-01
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

我遇到了这种黑客:如果您关心的是不重新渲染视图,您可以从render(). DOM 不会更新。

我的情况:我有一个不应该渲染任何内容的下载方法。


public function download()

{

   $this->skipRender();

}


public function render()

{

    if($this->shouldSkipRender) {

        return '';

    }

    

    return view("xxxxx");

}

只要我没有遗漏任何东西,这对我有用。


查看完整回答
反对 回复 2023-10-01
?
繁星coding

TA贡献1797条经验 获得超4个赞

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



查看完整回答
反对 回复 2023-10-01
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

对于现在遇到此问题的任何人,Livewire 3 中的新功能可以解决此问题。


Livewire 3Component具有skipRender()可以在执行事件处理程序逻辑后调用的函数。


#[On('some_event')]

public function handleSomeEvent()

{

    -- event code here


    $this->skipRender();

}

顺便说一句,在文档中,还有一个#[Renderless]属性可以添加到方法中,以指示它们不应导致组件重新渲染。#[On]但是,我发现这对也具有侦听事件属性的方法没有影响。


查看完整回答
反对 回复 2023-10-01
  • 4 回答
  • 0 关注
  • 92 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信