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

Livewire嵌套组件更新输入时多维数组其余值被重置如何解决

修复方案

1. 修正后端数组索引映射

你当前mount方法中直接用Employees::all()->toArray()得到的是顺序数字索引的数组(索引为0、1、2……),但前端wire:model绑定用员工ID作为items数组的索引,前后端索引不匹配会导致Livewire更新数据时定位错误,触发其他字段重置。
修改mount方法,指定用员工ID作为数组键:

public function mount() {
    $this->items = Employees::all()->keyBy('id')->toArray();
}

2. 给循环项添加唯一wire:key

Livewire循环渲染时必须给每个循环项添加唯一标识wire:key,否则DOM diff逻辑无法区分不同输入框,更新时会重渲染整个循环导致其他输入值丢失。
修改前端循环代码:

@foreach ($items as $id => $item)
   <div wire:key="employee-{{ $id }}">
       <input wire:model="items.{{ $id }}.employee_id" type="text">
       <input wire:model="items.{{ $id }}.name" type="text">
   </div>
@endforeach

3. 修正字段更新监听钩子(可选)

你定义的updatedName()只能监听到组件顶层$name属性的更新,无法触发嵌套的items.*.name字段更新事件。如果需要监听嵌套字段更新,修改钩子写法:

public function updatedItems($value, $path)
{
    // $path为更新字段的相对路径,例如"3.name"
    dd($this->items);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:09:03