Dealing with Unexpected Re-renders in SSR
Introduction:
React components in server-side rendered (SSR) Next.js applications can sometimes re-render unnecessarily, leading to performance issues. Identifying and addressing these re-renders is crucial for a smooth user experience.
In this blog, we’ll explore why this happens and how to solve it effectively.

Uncaught TypeError: Cannot Read Property ‘X’ of Undefined
The Problem:
React re-renders components when props or state change. However, in SSR, even minor discrepancies between the server and client-rendered content can trigger re-renders. For example:
export default function Home({ data }) {
console.log(‘Component re-rendered’);
return <div>{data}</div>;
}
export async function getServerSideProps() {
return { props: { data: ‘Hello, World!’ } };
}
Here, the component re-renders unnecessarily on the client.
Understanding the Issue
The re-renders occur because hydration processes the server-rendered content and compares it to the client-rendered content. If any mismatch is detected, React triggers a re-render.
The Solution:
Use useMemo
and useCallback
to cache expensive calculations and event handlers.
import { useMemo } from ‘react’;
export default function Home({ data }) {
const memoizedData = useMemo(() => data, [data]);
console.log(‘Component re-rendered’);
return <div>{memoizedData}</div>;
}
Explanation
useMemo
: Prevents unnecessary recalculations.- Stable Props: Ensures the server and client content matches perfectly.