Сторінка списку користувачів має props users і companies (для фільтра). Користувач змінює фільтр - потрібні нові users, а companies не змінилися. Отримувати й перераховувати все - марна робота.
Часткове перезавантаження - запит лише вибраних props тієї самої сторінки:
import { router } from '@inertiajs/vue3';
router.reload({ only: ['users'], data: { company: 3 } });
router.reload({ except: ['companies'] });
<Link href="/users?active=1" :only="['users']">Активні</Link>
Працює лише для візитів на той самий компонент сторінки.
Щоб сервер справді не виконував зайве - props мають бути замиканнями:
return Inertia::render('Users/Index', [
'users' => fn () => User::query()->filter(request()->all())->paginate(),
'companies' => fn () => Company::orderBy('name')->get(['id', 'name']),
]);
Без замикання Company::all() виконається на кожен запит, навіть якщо результат не потрапить у відповідь.
Типи props:
| Запис | Звичайний візит | Часткове перезавантаження | Обчислюється |
|---|---|---|---|
User::all() |
так | за запитом | завжди |
fn () => User::all() |
так | за запитом | лише коли потрібен |
Inertia::optional(fn () => ...) |
ні | за запитом | лише коли потрібен |
Inertia::always(...) |
так | завжди | завжди |
Inertia::optional()- prop, який сторінка отримує лише на явний запит (only): дані для вкладки, яку відкривають рідко. У Inertia 3 він замінив видаленийInertia::lazy();Inertia::always()- потрапляє навіть у часткові перезавантаження (так передаються помилки валідації).
Inertia 3: only/except підтримують крапкову нотацію для вкладених props (only: ['auth.notifications']), а optional, defer, merge працюють на будь-якій глибині масиву.
Поєднання з once(): Inertia::optional(fn () => ...)->once() - завантажити один раз і пам'ятати на клієнті між переходами.
Докладніше в документації: Inertia: часткові перезавантаження