Группа отложенных пропсов в Inertia
Пусть на странице пользователей есть три тяжёлых справочника и ещё один блок прав, который логичнее грузить отдельно. Если каждый отложенный пропс уходит своим запросом, сеть забивается мелкими походами. Inertia умеет склеивать догрузку по имени группы.
У метода defer второй
аргумент - строка с названием
группы. Пропсы с одним именем
группы попадают в один запрос
после первого экрана, а пропс
без группы или с другим именем
уезжает параллельно своей
пачкой.
Давайте отдадим права
отдельно, а команды и проекты
в группе attributes:
<?php
use Illuminate\Support\Facades\Route;
use Inertia\Inertia;
Route::get('/users', function () {
return Inertia::render('Users/Index', [
'users' => ['Anna', 'Boris'],
'permissions' => Inertia::defer(
fn () => ['edit'],
),
'teams' => Inertia::defer(
fn () => ['Alpha'],
'attributes',
),
'projects' => Inertia::defer(
fn () => ['Site'],
'attributes',
),
]);
});
?>
Давайте покажем каждый блок, когда его пропс уже на месте:
<script setup>
defineProps({
users: Array,
permissions: Array,
teams: Array,
projects: Array,
})
</script>
<template>
<ul>
<li v-for="user in users" :key="user">
{{ user }}
</li>
</ul>
<p v-if="permissions">
Permissions: {{ permissions.join(', ') }}
</p>
<p v-if="teams">
Teams: {{ teams.join(', ') }}
</p>
<p v-if="projects">
Projects: {{ projects.join(', ') }}
</p>
</template>
Сделайте экран работника, где навыки и значки догружаются одним поздним запросом, а расписание приходит отдельно.