【问题标题】:Laravel Livewire Same Component Two Items Sync in One PageLaravel Livewire 相同的组件 两个项目在一个页面中同步
【发布时间】:2020-11-14 14:23:55
【问题描述】:

我制作了follower 组件。

如果访问者关注作者,则组件将显示Following,否则将显示Follow。

我把follower组件放在页面的两个地方。

-follower 组件。

<div>
    <a href="javascript:void(0);" class="follow_btn" wire:click="toggle">{{$following? 'Following': 'Follow'}}</a>
</div>

公开 $following = true; 公开 $post;

public function mount($post)
{
    $this->post = $post;
}
public function render()
{
    if(Auth::check()&&user()->isFollowing($this->post->user))
    {
        $this->following = true;
    }else {
        $this->following = false;
    }
    return view('livewire.following');
}
public function toggle()
{
    user()->toggleFollow($this->post->user);
}

我在一个页面的两个地方使用这个组件。

<livewire:follower :post="$post">
...
<livewire:follower :post="$post">

当我单击一个组件时,它被切换并且运行良好。

但其他组件保持旧状态。

如何同步它们?

谢谢

【问题讨论】:

  • 您是否尝试将不同的密钥传递给两个组件?比如 :key="first-{{ $post->id }}" 和 :key="second-{{ $post->id }}"
  • 同步它们??
  • @lovecoding 你能同步它们吗?我也有同样的缺点。
  • @user2851148 请检查此答案。 stackoverflow.com/a/66292844/13431339

标签: php laravel eloquent livewires laravel-livewire


【解决方案1】:

我必须发出刷新事件。

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

public function mount($post)
{
    $this->post = $post;
}
public function render()
{
    if(Auth::check()&&user()->isFollowing($this->post->user))
    {
        $this->following = true;
    }else {
        $this->following = false;
    }
    return view('livewire.following');
}
public function toggle()
{
    user()->toggleFollow($this->post->user);
    $this->emit('followingRefresh'); //emit event
}
    

希望这对某人有所帮助。

【讨论】:

    猜你喜欢
    • 2021-06-22
    • 2017-08-20
    • 2018-05-28
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    相关资源
    最近更新 更多