inertia
inertia copied to clipboard
Vue 3: usePage().props.filter returns null instead of expected object structure from Laravel Shared Data
Version:
@inertiajs/vue3version: 1.0.14
Describe the problem:
When attempting to access shared props using usePage().props within a Vue 3 component, specifically trying to access a nested property (filter.current.name), the expected data structure (filter) is returned as null instead of containing the nested current object. The Laravel backend correctly prepares and logs the shared data structure as containing {"current": null} when session()->get('filter') is null, indicating that the server-side logic functions as intended. However, when accessing this data on the client side through Inertia.js in a Vue 3 setup function, the entire filter object is logged as null, contrary to expectations based on the shared data from the server. I expect to receive an object with at least the current key (even if it's null) instead of the entire filter prop being null.
Steps to reproduce:
-
Backend Setup: Use Laravel to set up an Inertia middleware (
HandleInertiaRequests) that shares afilterprop, which includes a nestedcurrentobject. This object is supposed to benullif there's no session data available, which is the intended and confirmed behavior through Laravel logs. -
Frontend Access: In a Vue 3 component, attempt to access this shared
filterprop usingusePage().props.filter, expecting to receive the shared data structure. -
Observation: Despite the backend correctly sharing the
filterdata structure with{"current":null},usePage().props.filteris logged as null in the Vue 3 component'sonMountedlifecycle hook, indicating a discrepancy in what's shared versus what's received.
I've worked with shared data and never run into this issue. Can't really help without seeing your code.
What happens if you call getShared in your controller just before returning a response?
Route::get('/users', function () {
Inertia::share('foo', 'bar');
dd(\Inertia\Inertia::getShared());
return inertia('Users', [
'users' => User::get(),
]);
});
Is your 'filters' property appearing in the output there? If not, it's likely an issue with how you've set up the Middleware.