patternphplaravelModerate
Inertia.js: Shared Data, Partial Reloads, and Error Handling
Viewed 0 times
inertiasharelazy proppartial reloadflashHandleInertiaRequestsvuereact
Problem
Inertia apps render the full page on every request, flash messages are not persisted across redirects, and large shared datasets re-compute on every page load.
Solution
Share global data (auth user, flash messages) via Inertia::share() in HandleInertiaRequests middleware. Use Inertia::lazy() for data that should only load on the initial visit. Use partial reloads (router.reload({ only: ['posts'] })) to refresh specific props without a full page visit.
Why
HandleInertiaRequests::share() runs on every Inertia request so shared props are always available. Lazy props reduce payload size on initial load. Partial reloads avoid fetching unchanged data.
Gotchas
- Inertia redirects must use 303 status for POST/PUT/DELETE—Laravel does this automatically with redirect()
- Flash messages must be shared inside HandleInertiaRequests::share() where session is available, not in a controller
- Inertia::lazy() data is only included when explicitly requested in a partial reload
- Back-forward navigation uses a local snapshot cache—ensure server responses include the X-Inertia-Version header
Code Snippets
Sharing flash data via HandleInertiaRequests
class HandleInertiaRequests extends Middleware
{
public function share(Request $request): array
{
return array_merge(parent::share($request), [
'auth' => ['user' => $request->user()],
'flash' => [
'success' => fn() => $request->session()->get('success'),
'error' => fn() => $request->session()->get('error'),
],
]);
}
}Revisions (0)
No revisions yet.