Hydration Strategies
Hydration is the process of attaching React event handlers to server-rendered HTML, making it interactive. React Router provides several strategies to optimize this process.Basic Hydration
By default, React Router hydrates immediately with server data:Client Loaders
Run additional logic on the client during hydration:Hydrate Flag
Control whether client loaders run on hydration:Default Behavior
hydrate = true: When there’s no server loaderhydrate = false: When callingserverLoader()hydrate = true: When not callingserverLoader()
HydrateFallback
Show a loading state during client loader execution:HydrateFallback Behavior
- Only runs on initial hydration: Not on client-side navigations
- Requires clientLoader: With
hydrate = true - Bubbles up: Renders parent’s
HydrateFallbackif none provided - No Outlet: Cannot render children (they may not have data yet)
Partial Hydration
Hydrate different parts of your app at different times:Streaming Hydration
Combine with deferred data for progressive hydration:Optimistic Hydration
Assume server data is available and hydrate eagerly:Selective Hydration
Only hydrate interactive components:Island Architecture
Hydrate isolated interactive regions:Custom Hydration
Full control over the hydration process:Hydration Errors
Debug mismatches between server and client:Performance Monitoring
Track hydration performance:Best Practices
- Use server data by default: Set
hydrate = falsewhen possible - Show loading states: Use
HydrateFallbackfor better UX - Minimize client loaders: Keep hydration fast
- Test without JavaScript: Ensure server-rendered content works
- Monitor hydration time: Track performance metrics