Laravel Livewire 组件在刷新后不会自动刷新/重新加载

Posted

技术标签:

【中文标题】Laravel Livewire 组件在刷新后不会自动刷新/重新加载【英文标题】:Laravel Livewire component not refreshing/reloading automatically after refreshing it 【发布时间】:2020-06-09 05:56:48 【问题描述】:

所以,我目前在我的一个项目中使用Laravel Livewire。但是,当我尝试通过魔术方法 $refresh 将事件从一个组件发送到另一个组件时,它会刷新(在 xhr 请求中获取 dom)整个组件,但前端不会实时更新。

ProductReviewForm.php 组件:

public function save()

    //some functionalities .... 
    $this->emit('reviewSectionRefresh');

ProductReviewSection.php 组件:

protected $listeners = [
    'reviewSectionRefresh' => '$refresh',
];

public function render()

    $this->review_lists = ProductReview::orderBy('id', 'DESC')->get();

    return view('livewire.desktop.product-review-section');
 

所以我想在第一个组件调用save() 函数时发出reviewSectionRefresh 事件,这应该由其他组件的$listeners 监听。这工作正常。同样在 xhr 中,我得到了刷新的 dom,但前端的组件没有更新。希望与 Livewire 合作的任何人都可以对此有所帮助。

【问题讨论】:

我不确定,但你可以试试不带引号的'$refresh' 您是否尝试将对象作为第二个参数传递给view()? `return view('template-name', ['review_lists' => $review_lists]); @KPK ,不,这会给出错误,未定义 $refresh ,因为这将需要 $refresh 变量。你可以看到calebporzio.com/video-realtime-livewire-w-laravel-echo-pusher这个。 (第二个视频在 2.54 分钟) Livewire 是不久前出现的全新事物,这就是为什么我到目前为止找不到任何帮助。 你有触发动作吗?类似<button wire:click="save"> @Chemaclass 它不像那样工作,兄弟 :( 请参阅此处的 Livewire:youtu.be/fX1aOWWt2nQ 【参考方案1】:

看来我以错误的方式编写了组件刀片视图。

刷新组件上的所有东西都应该像这样包装在一个 div 元素中:

<div> 
-- Anything you want to do --

</div>  

以前我的刀片文件是这样的。 哪里错了

<div class=""> 
  -- some dom elements -- 
</div>

<div class=""> 
 -- some other dom elements -- 
</div>

但应该是这样的。

<div>
    <div class=""> 
        -- some dom elements -- 
    </div>

    <div class=""> 
     -- some other dom elements -- 
    </div>
</div>

所以无论你写什么,都应该在 ONE PARENT DIV ELEMENT 中

【讨论】:

是 Livewire 组件必须有一个根元素 哦,伙计。我忘记检查我的组件是否未包含在同一元素中。我挠了头两个小时 希望对您有所帮助。当我第一次学习 livewire 时,我也花了好几个小时。 :D 大家好,我也是 laravel livewire 的新手。我遇到了wire:model 和wire:click 的问题。尽管我在 mount 方法中设置了值,但模型值不是初始化事件。 click 和 model 元素都在父 div 元素内,但它仍然不起作用。各位有经验的livewire用户可以给点建议吗? @SanjeetChand 如果您找不到问题的正确答案,请在 SO 中发布问题并提供详细信息。那么了解您的查询会更好

以上是关于Laravel Livewire 组件在刷新后不会自动刷新/重新加载的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 8 Jetstream 的 Blade 组件中绑定 Livewire 属性

Laravel 8 livewire 在任务完成或在其外部单击页面时隐藏菜单组件

Laravel Livewire:输入选择,选择默认选项

Laravel Livewire,两个 livewire 组件之间的通信

Laravel Livewire 组件偏移

Laravel 和 Livewire:组件更改时如何执行 javascript 函数?