Я сейчас настраиваю новый проект React. Любой, кто использовал styled-components
вместе с React, знает, что для запуска этого механизма требуется небольшая настройка.
Вот как я реализовал свою настройку на основе документов styled-components
& Next.js
:
Пакет. json
"styled-components": "^5.1.0"
"babel-plugin-styled-components": "^1.10.7",
.babelr c:
{
"presets": ["next/babel"],
"plugins": [
[
"babel-plugin-styled-components",
{
"ssr": true
}
]
]
}
След. _document.js
:
import Document from "next/document";
import { ServerStyleSheet } from "styled-components";
export default class MyDocument extends Document {
static async getInitialProps(ctx) {
const sheet = new ServerStyleSheet();
const originalRenderPage = ctx.renderPage;
try {
ctx.renderPage = () =>
originalRenderPage({
enhanceApp: (App) => (props) =>
sheet.collectStyles(<App {...props} />),
});
const initialProps = await Document.getInitialProps(ctx);
return {
...initialProps,
styles: (
<>
{initialProps.styles}
{sheet.getStyleElement()}
</>
),
};
} finally {
sheet.seal();
}
}
}
Это реализовано в точности так, как указано в документации, но я (иногда!) Получаю несоответствие между серверными classNames и клиентскими classNames ...
В любом случае, если я выключу уведомления, чтобы предупредить меня о проблеме, я не могу знать, когда или если стили поступают с сервера или клиента.
Как вы определяете, визуализируются ли стили на стороне сервера или на стороне клиента?