I'm getting the following error using SSR
Warning: Expected server HTML to contain a matching <div> in <div>.
The issue is on the client when checking the browser width on component mount, and then setting the state of a component to render a mobile version of it instead.
But the server is defaulting the desktop version of the container as it is not aware of the browser width.
How do I deal with such a case? Can I somehow detect the browser width on the server and render the mobile container before sending to the client?
EDIT: For now I've decided to render the container when the component mounts. This way, both server and client side render nothing initially preventing this error.
I'm still open to a better solution
HTTP Client Hints could help you with this.
Another interesting article regarding Client Hints.
My solution is to use a middleware like express-useragent to detect the browser user agent.
Then, in the server side, create a
viewsize
like{width, height}
by the following rulesThen, it is still somehow a responsive design in SSR.
The current accepted answer doesn’t play well with TypeScript. Here is what works for me.
This will solve the issue.