Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 59 additions & 0 deletions apps/public-docsite-v9/src/Concepts/SSR/SSR.stories.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,65 @@ import { SSRDefaultOpen } from './MenuSSRDefaultOpen.stories';

Fluent UI React v9 fully supports Server-Side Rendering.

### Basic setup

For any setup using SSR, you need to provide a `RendererProvider`, `SSRProvider` and `ThemeProvider` in the root file of your app. If these providers are not added, there will be issues when hydrating. See the following example:

```tsx
import * as React from 'react';
import * as ReactDOM from 'react-dom/server';
import {
createDOMRenderer,
FluentProvider,
makeStyles,
RendererProvider,
renderToStyleElements,
SSRProvider,
webLightTheme,
} from '@fluentui/react-components';

const useExampleStyles = makeStyles({
root: {
color: 'red',
},
});

const ExampleComponent: React.FC = () => {
const classes = useExampleStyles();

return <div className={classes.root}>Hello world</div>;
};

const server = express();

server.get('/', (req, res) => {
const renderer = createDOMRenderer();

const html = ReactDOM.renderToString(
<RendererProvider renderer={renderer}>
<SSRProvider>
<FluentProvider theme={webLightTheme}>
<ExampleComponent />
</FluentProvider>
</SSRProvider>
</RendererProvider>,
);

res.send(`
<html>
<head>
${renderToStyleElements(renderer)}
</head>
<body>
<div id="root">${html}</div>
</body>
</html>
`);
});

server.listen(3000, 'localhost');
```

### Next.js

For basic instructions on getting Next.js set up, see [Getting Started](https://nextjs.org/docs/getting-started).
Expand Down