reduxjs / redux-toolkit

The official, opinionated, batteries-included toolset for efficient Redux development
https://redux-toolkit.js.org
MIT License
10.63k stars 1.15k forks source link

RTK Query and Next 13 `app` dir / React Server components: status and discussion #3508

Open markerikson opened 1 year ago

markerikson commented 1 year ago

We're getting a lot of questions about whether RTK Query works with RSCs.

Quoting Lenz at https://twitter.com/phry/status/1666553972075687938 :

There's a lot of nuance. In client components, it effectively already works, but not for SSR. In RSC, it's probably not a particularly useful/good idea. In Client component SSR we need support for two things: streaming SSR data transport and a good suspense story.

Of those last two things, the first right now can only be solved in a very unsatisfying way with a Next-specific api. The latter would probably build on top of use, but it would be a "temporary" api design until React would add use support for observables (if they ever do).

We're also looking at tweaking RTKQ + React-Redux to not throw errors related to calling createContext in an RSC environment.

markerikson commented 1 year ago

Related issues:

markerikson commented 1 year ago

General notes:

EvHaus commented 11 months ago

@markerikson I'm having issues with getting Redux state hydration working in Next 13. My strategy from Next 12 & pages router doesn't work with the app router. And the with-redux doesn't include a hydration example.

Are you aware of this already? If not -- should I open a new issues to dig into this further, or would you prefer a comment in this ticket instead?

markerikson commented 11 months ago

@EvHaus : per this thread, we generally don't have any specific support for the App Router + Redux stuff atm, beyond "if you intend to use Redux on the client side, make sure to render <Provider> in a client component".

What are you actually trying to accomplish?

EvHaus commented 11 months ago

I want the server to fetch data from a database and return it to the client along with the SSR HTML so that Redux state can be hydrated on the client without the client needing to make its own additional fetches. Very similar to what https://github.com/kirill-konshin/next-redux-wrapper is doing.

markerikson commented 11 months ago

Yeah, we have no actual answer for that with the App Router right now, largely due to the lack of API features needed to make that even possible. See Lenz's article here for some more details:

@phryneas can maybe chime in more, but right now that's not feasible as far as I know.

markerikson commented 9 months ago

Note that we now have official docs on how to set up Redux with Next.js and the App Router correctly:

browynlouis commented 8 months ago

Thanks for the documentation..it was really needed. Although there's a statement there that says

only use Redux for globally shared, mutable data

I do plan to use Redux for global data, but probably not mutable.

For example, when my application loads, I plan to fetch the app settings and store the data in the redux store so I can have it readily accessible for client components usage.

What's your take on this please ?