主题
#[Lazy]
#[Lazy] 属性使组件仅在进入视口时才加载,防止慢速组件阻塞初始页面渲染。
基本用法
将 #[Lazy] 属性应用于任何应延迟加载的组件:
php
<?php // resources/views/components/⚡revenue.blade.php
use Livewire\Attributes\Lazy;
use Livewire\Component;
use App\Models\Transaction;
new #[Lazy] class extends Component { // [tl! highlight]
public $amount;
public function mount()
{
// Slow database query...
$this->amount = Transaction::monthToDate()->sum('amount');
}
};
?>
<div>
Revenue this month: {{ $amount }}
</div>使用 #[Lazy],组件最初渲染为空的 <div></div>,然后在进入视口时加载——通常是当用户滚动到它时。
Lazy vs Defer
Livewire 提供两种延迟组件加载的方式:
- 懒加载(
#[Lazy]) - 组件在进入视口时加载(当用户滚动到它们时) - 延迟加载(
#[Defer]) - 组件在初始页面加载完成后立即加载
对于用户可能不会滚动到的折叠下方组件使用懒加载。对于始终可见但你希望在页面渲染后加载的组件使用延迟加载。
渲染占位符
默认情况下,Livewire 在组件加载之前渲染空的 <div></div>。你可以使用 placeholder() 方法提供自定义占位符:
php
<?php // resources/views/components/⚡revenue.blade.php
use Livewire\Attributes\Lazy;
use Livewire\Component;
use App\Models\Transaction;
new #[Lazy] class extends Component {
public $amount;
public function mount()
{
$this->amount = Transaction::monthToDate()->sum('amount');
}
public function placeholder() // [tl! highlight:start]
{
return <<<'HTML'
<div>
<div class="animate-pulse bg-gray-200 h-20 rounded"></div>
</div>
HTML;
} // [tl! highlight:end]
};
?>
<div>
Revenue this month: {{ $amount }}
</div>用户将看到骨架占位符,直到组件进入视口并加载。
匹配占位符元素类型
如果占位符的根元素是 <div>,你的组件也必须使用 <div> 元素。
捆绑请求
默认情况下,懒加载组件使用独立的网络请求并行加载。要将多个懒加载组件捆绑到单个请求中,使用 bundle 参数:
php
<?php // resources/views/components/⚡revenue.blade.php
use Livewire\Attributes\Lazy;
use Livewire\Component;
new #[Lazy(bundle: true)] class extends Component { // [tl! highlight]
// ...
};现在,如果页面上有十个 revenue 组件,所有十个都将通过单个捆绑的网络请求加载,而不是十个并行请求。
替代方法
使用 lazy 参数
除了属性,你可以使用 lazy 参数延迟加载特定的组件实例:
blade
<livewire:revenue lazy />当你只想延迟加载组件的某些实例时,这很有用。
覆盖属性
如果组件有 #[Lazy] 但你想在某些情况下立即加载它,你可以覆盖它:
blade
<livewire:revenue :lazy="false" />何时使用
在以下情况使用 #[Lazy]:
- 组件包含会延迟页面加载的慢操作(数据库查询、API 调用)
- 组件在折叠下方,用户可能不会滚动到它
- 你想通过更快地显示页面来提高感知性能
- 单个页面上有多个昂贵的组件
了解更多
有关懒加载的完整文档,包括占位符、捆绑策略和传递 props,请参阅懒加载文档。
参考
php
#[Lazy(
bool|null $bundle = null,
)]| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
$bundle | bool|null | null | 将多个懒加载组件捆绑到单个网络请求中 |