Laravel 用 Livewire 写全栈组件:服务端渲染加增量更新,少写前端胶水

test12026-10-162 次阅读

Livewire 解决什么问题

想做一个带交互的页面,传统做法是前端写组件、后端写 API、再 glue 一遍。Livewire 让你只写一个 PHP 类加一段 Blade,交互由服务端渲染、前端只做增量更新,省掉大量胶水代码。

安装与创建组件

composer require livewire/livewire
php artisan make:livewire Counter
// app/Livewire/Counter.php
namespace App\Livewire;

use Livewire\Component;

class Counter extends Component
{
    public int $count = 0;

    public function increment()
    {
        $this->count++;
    }

    public function render()
    {
        return view("livewire.counter");
    }
}

Blade 模板

<!-- resources/views/livewire/counter.blade.php -->
<div>
    <p>当前计数:{{ $count }}</p>
    <button wire:click="increment">+1</button>
</div>

带表单与校验

Livewire 的表单绑定和校验开箱即用,wire:model 双向绑定,rules 写在组件里。

// app/Livewire/ContactForm.php
namespace App\Livewire;

use Livewire\Component;
use App\Models\Message;

class ContactForm extends Component
{
    public string $name = "";
    public string $body = "";

    protected function rules()
    {
        return [
            "name" => "required|min:2",
            "body" => "required|min:10",
        ];
    }

    public function submit()
    {
        $this->validate();
        Message::create($this->only(["name", "body"]));
        $this->reset();
        session()->flash("ok", "已收到");
    }

    public function render()
    {
        return view("livewire.contact-form");
    }
}
<!-- resources/views/livewire/contact-form.blade.php -->
<form wire:submit="submit">
    <input type="text" wire:model="name" />
    @error("name") <span>{{ $message }}</span> @enderror
    <textarea wire:model="body"></textarea>
    @error("body") <span>{{ $message }}</span> @enderror
    <button type="submit">提交</button>
</form>

工程注意点

  • Livewire 每次交互都往返服务端,纯前端的高频动画还是用 Alpine.js 或 Vue 更合适。
  • wire:model 默认防抖,加 .live 或 .debounce 控制时机,避免每次按键都请求。
  • 大列表用分页或 wire:poll 轮询,别一次性把上万条塞进组件属性。
  • 生产环境记得开 Livewire 的编译资产,避免开发期的运行时解析开销。
T

test1

文章作者

Livewire 解决什么问题 想做一个带交互的页面,传统做法是前端写组件、后端写 API、再 glue 一遍。Liv...

分类
技术
发布时间
2026-10-16
字数
约 1991 字
阅读
2 次