Server Side Rendering
You can get the CSS string by getCssString()
function. You can import it from @fower/react
.
import { getCssString, getAtomIds } from '@fower/react'
With Nextjs
Here's an example with Next.js (Don't forget to set data-fower={getAtomIds()}
in style tag):
_document.tsx
import Document, { Html, Head, Main, NextScript } from 'next/document'
import { getAtomIds, getCssString } from '@fower/react'
class MyDocument extends Document {
render() {
return (
<Html>
<Head>
<style data-fower={getAtomIds()} dangerouslySetInnerHTML={{ __html: getCssString() }} />
</Head>
<body>
<Main />
<NextScript />
</body>
</Html>
)
}
}
export default MyDocument
Alternative you can setup it with a <ServerStyle>
component:
import Document, { Html, Head, Main, NextScript } from 'next/document'
import { ServerStyle } from '@fower/react'
class MyDocument extends Document {
render() {
return (
<Html>
<Head>
<ServerStyle />
</Head>
<body>
<Main />
<NextScript />
</body>
</Html>
)
}
}
export default MyDocument
Advanced
You can also use the advanced integration, it's very simple, just use getAtomId
and getCssString
to generate style element in your server
import { renderToString } from 'react-dom/server'
import { getAtomIds, getCssString } from '@fower/react'
const html = renderToString(<App />)
res.status(200).header('Content-Type', 'text/html').send(`<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>My site</title>
<style data-fower="${getAtomIds()}">${getCssString()}</style>
</head>
<body>
<div id="root">${html}</div>
<script src="./bundle.js"></script>
</body>
</html>`)