inertiajs / inertia

Inertia.js lets you quickly build modern single-page React, Vue and Svelte apps using classic server-side routing and controllers.
https://inertiajs.com
MIT License
6.56k stars 435 forks source link

[2.x] Prefetch causes stale data to be shown after post #2017

Open nick-potts opened 1 month ago

nick-potts commented 1 month ago

Versions:

Describe the problem:

After submitting a post request that changes the current page's data, the previous prefetch value will still be used and the user will be shown stale data.

Steps to reproduce:

Set a page to be prefetched: "/settings" Visit "/" Visit "/settings" router.post('/settings/update') - this returns data that modifies the settings page data Visit "/" Visit "/settings" - here you'll get the data from the prefetch, not the merged props from the post.

pedroborges commented 1 month ago

This should be fixed by #2023. Please test it once beta 2 is out 😉

RobertBoes commented 1 month ago

@pedroborges @reinink Any chance this could get released? I'm experiencing quite a lot of issues and I'm not sure if this is solved by #2023 since the tests there only reference deferred props. But I'm also hesitant to report an issue if it's potentially already fixed.

nick-potts commented 1 month ago

Sadly not fixed by beta 2 @pedroborges

https://imgur.com/a/tUAzjgH

Cacamoto commented 1 month ago

Yes, hopefully prefetch will get some love. Just upgraded to beta 2 and still getting those

Uncaught (in promise) DataCloneError: Failed to execute 'replaceState' on 'History': #<Object> could not be cloned. 
From history.ts:101
joetannenbaum commented 1 week ago

@nick-potts we don't automatically flush the page prefetch after something like a posted form, but you can do it manually on success by passing the same options to router.flush() as you passed to router.prefetch. Does this help you solve this issue?

nick-potts commented 1 week ago

That does work. I'm struggling to get it to prefetch the page again afterwards, but I think that's skill issues.