Skip to content

No SSR

The NoSsr component defers the rendering of children components from the server to the client.

Introduction

NoSsr is a utility component that prevents its children from being rendered on the server.

This component can be useful in a variety of situations:

  • To create an escape hatch for broken dependencies that don't support server-side rendering (SSR)
  • To improve the time to first paint by only rendering above the fold
  • To reduce the rendering time on the server
  • To turn on service degradation when the server load is too heavy
  • To improve the Time to Interactive (TTI) by only rendering what's important (using the defer prop)

Component

Usage

After installation, you can start building with this component using the following basic elements:

import NoSsr from '@mui/base/NoSsr';

export default function MyApp() {
  return <NoSsr>{/* element to be rendered on the client side */}</NoSsr>;
}

Basics

At its core, the NoSsr component's purpose is to defer rendering from the server to the client, as shown in the following demo:

Server and Client
<Box sx={{ p: 2, bgcolor: 'primary.main', color: 'primary.contrastText' }}>
  Server and Client
</Box>
<NoSsr>
  <Box
    sx={{ p: 2, bgcolor: 'secondary.main', color: 'secondary.contrastText' }}
  >
    Client only
  </Box>
</NoSsr>

Customization

Delay client-side rendering

You can also use NoSsr to delay the rendering of specific components on the client side—for example, to let the rest of the application load before an especially complex or data-heavy component.

The following demo shows how to use the defer prop to prioritize rendering the rest of the app outside of what is nested within NoSsr: