用途:用于处理任何涉及 Livewire 的任务或问题,当用户提到 Livewire、wire: 指令或 wire:model 等 Livewire 概念时激活。详细 Livewire 3 模式与文档可参考 search-docs。
主要能力与概念:状态应保存在服务端,UI 反映状态;所有 Livewire 请求都会打到 Laravel 后端,类似普通 HTTP 请求,因此必须在 Livewire action 中校验表单数据并执行授权检查。创建组件使用命令:php artisan make:livewire [Posts\CreatePost]。
Livewire 3 变化:实时更新用 wire:model.live,wire:model 默认延迟;组件命名空间改为 App\Livewire(不再是 App\Http\Livewire);事件派发用 $this->dispatch()(不再用 emit 或 dispatchBrowserEvent);典型布局路径为 components.layouts.app(不再是 layouts.app)。新增指令:wire:show、wire:transition、wire:cloak、wire:offline、wire:target。Alpine 已随 Livewire 内置,不要手动引入;内置插件有 persist、intersect、collapse、focus。
最佳实践:组件需要单一根元素;用 wire:loading 和 wire:dirty 做加载状态;循环中使用 wire:key,例如 wire:key="item-{{ $item->id }}";优先用 mount()、updatedFoo() 等生命周期钩子处理初始化与响应式副作用。JavaScript 钩子可监听 livewire:init,并用 Livewire.hook('request')、Livewire.hook('commit') 处理失败。
测试:可用 Livewire::test(Counter::class)->assertSet('count', 0)->call('increment')->assertSet('count', 1)->assertSee(1)->assertStatus(200);也可用 $this->get('/posts/create')->assertSeeLivewire(CreatePost::class)。
常见陷阱:循环中忘记 wire:key 会导致项目变化时行为异常;误以为 wire:model 实时更新(v3 应用 wire:model.live);在 Livewire action 中不校验或授权;在 Livewire 3 已内置 Alpine 时仍单独引入。