You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何仅最后点击的点赞心形按钮变色,其余按钮状态无变化?

解决收藏心形按钮状态异常问题

问题根源

你当前的代码里,$vacid是单个变量,在mount方法的循环中,每次遍历用户收藏记录都会覆盖这个变量的值,最终只会保留最后一条收藏的职位ID。这就导致渲染时只有最后一个匹配的按钮显示填充状态;点击新按钮更新后,新的ID会覆盖旧值,之前的收藏按钮全部变回空心。

修复步骤

1. 修改组件数据结构,存储所有收藏ID

把单个变量改成数组,存储用户所有收藏的职位ID:

class Products extends Component
{
    public $orderBy;
    // 用数组存储所有收藏的职位ID
    public $favVacIds = [];
   
    public function mount()
    {
        $this->orderBy = "Sorteer: Nieuwste Vacatures";

        if(Auth::id()) {
            $user = Auth::user();
            // 直接提取所有收藏的vacature_id到数组
            $this->favVacIds = Favoriet::where('user_id', $user->id)->pluck('vacature_id')->toArray();
        }
    }
}

2. 调整模板判断逻辑

修改Blade模板,检查当前职位ID是否在收藏数组中,同时添加蓝色样式实现需求:

@if(in_array($vac->id, $favVacIds))
    <a class="bi bi-heart-fill fa-lg m-2 text-primary" href="{{url('favorieten',$vac->id)}}" 
       data-tooltip="tooltip" data-placement="top" title="Verwijder uit favorieten">
    </a>
@else
    <a class="bi bi-heart fa-lg m-2" href="{{url('favorieten',$vac->id)}}" 
       data-tooltip="tooltip" data-placement="top" title="Voeg toe aan favorieten">
    </a>
@endif
<div class="border"></div>
@endforeach 
</div> 

注:text-primary是Bootstrap默认的蓝色类,可根据你的样式需求替换成自定义蓝色类

3. 可选:实现无刷新实时更新状态

如果需要点击按钮后不用刷新页面就更新状态,在组件中添加收藏切换方法:

public function toggleFavoriet($vacatureId)
{
    $user = Auth::user();
    $favoriet = Favoriet::where('user_id', $user->id)->where('vacature_id', $vacatureId)->first();

    if($favoriet) {
        // 取消收藏,从数组移除ID
        $favoriet->delete();
        $this->favVacIds = array_diff($this->favVacIds, [$vacatureId]);
    } else {
        // 添加收藏,把ID加入数组
        Favoriet::create([
            'user_id' => $user->id,
            'vacature_id' => $vacatureId
        ]);
        $this->favVacIds[] = $vacatureId;
    }
}

然后修改模板链接为Livewire点击事件:

@if(in_array($vac->id, $favVacIds))
    <a class="bi bi-heart-fill fa-lg m-2 text-primary" wire:click="toggleFavoriet({{$vac->id}})" 
       data-tooltip="tooltip" data-placement="top" title="Verwijder uit favorieten">
    </a>
@else
    <a class="bi bi-heart fa-lg m-2" wire:click="toggleFavoriet({{$vac->id}})" 
       data-tooltip="tooltip" data-placement="top" title="Voeg toe aan favorieten">
    </a>
@endif

内容的提问来源于stack exchange,提问作者Ali Yuzbasioglu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 00:26:32