If you're building a complex web app today, you also have to deal with mutations and invalidations of data, and right now, before server components, there's only one way to do that, right, and that's on the client. So I want to talk a bit about how you do this if you're using a third-party library to manage your data fetching today. That doesn't have to be React Query, of course.
Another thing is that the Next docs currently list four ways to fetch data in server components or when using server components. And I want to claim there's a fifth way, which is the way a lot of us might be doing it today, which is prefetching data on the server, but doing all the invalidations and refetching and things on the client. Possibly with third-party libraries.
The approach we're going to take is to use server components mainly as data loaders and not render that much in them. Keep the rest of the application as client components, and we're gonna keep using React Query. We're also going to keep using your existing caching logic in your application. Because you already have working caching, and caching is hard to get right, right? And the app router has four. Four caches that interact with each other. And these are super powerful. They are great, and you want to opt in to them later after your migration is done.
So, to do that, we'll try to mimic the existing behavior that you probably have with get server side props or get static props, and the way we'll do that is by exporting this configuration, force dynamic or force error, and we'll get into that. But first we need to plan and prepare for this migration. And the very first thing you want to do is read all the documentation. Grab a coffee or a tea or something, spend an afternoon with these documents, the React documents, especially the next migration guide and the rest of the next documents, they are really, really good, very comprehensive, and any third party library documentation too.
Then you want to inventory your utils and your shared code, think about if there's anything you need to do there to support the app router. You want to inventory your third party libraries. Do they actually support the app router? What are you going to do if they don't? You want to think about deployment, DevOps, tests, authentication, but you don't have to solve all of these things now, but it's very good to get a feel for the scope and anticipate any hurdles you might have for your application. Where is this going to get tricky for you? So the pages and the app router are in a sense two separate frameworks. They have their own bundles and navigating between them is a full page reload. So that is probably fine for a lot of your pages, but for some pages it might not be. If you have a category page and a product details page that you navigate between very often or something like that. So plot out which pages you think you're going to need to migrate together. Then you want to pick a basic first route to migrate. This is probably your company about page, right? If I care to guess. And then you pick a more complex second route to migrate. And the first thing you want to do is to wrap those in strict mode.
Comments