Styled Components es una biblioteca popular para diseñar aplicaciones React. Permite a los desarrolladores escribir código CSS como si fuera un componente de JavaScript, lo que facilita la administración y el estilo de aplicaciones complejas. Styled Components también proporciona temas dinámicos, permite la creación de estilos reutilizables y simplifica el proceso de aplicar estilos a un componente en función de sus accesorios. En general, permite a los desarrolladores crear fácilmente interfaces web interactivas y visualmente sorprendentes con un mínimo esfuerzo.
En este tutorial, aprenderá a usar componentes con estilo en Next.js, el popular marco de renderizado del lado del servidor para React. Y verá algunas de las mejores prácticas para integrarlos en sus proyectos.
#yarn
yarn add styled-components
#npm
npm install styled-components
import styled from "styled-components";
const Title = styled.h1`
color: red;
`;
export default () => (
<div>
<Title>My First Next.js Page</Title>
</div>
);
Pero cuando quiera usarlo dentro de Next js, puede encontrarse con algunos problemas que quizás no entienda por qué actúa así. Por ejemplo, cuando actualiza la página, es posible que algunos de los elementos que creó con el componente con estilo no se representen correctamente y que estén vacíos. Para resolver este problema, debe proceder de la siguiente manera.
Primero debe instalar el siguiente paquete.
yarn add -D babel-plugin-styled-components
Cree un archivo llamado .babelrc en la ruta raíz del proyecto. Puedes escribir este comando en tu terminal.
touch .babelrc
El contenido de este archivo debería verse así:
{
"presets": ["next/babel"],
"plugins": [
[
"styled-components",
{
"ssr": true,
"displayName": true,
"preprocess": false
}
]
]
}
Si usó create-react-app, es mejor crear un archivo _document que reemplace su próximo documento.
import Document, { Head, Main, NextScript } from "next/document";
// Import styled components ServerStyleSheet
import { ServerStyleSheet } from "styled-components";
export default class MyDocument extends Document {
static getInitialProps({ renderPage }) {
// Step 1: Create an instance of ServerStyleSheet
const sheet = new ServerStyleSheet();
// Step 2: Retrieve styles from components in the page
const page = renderPage(
(App) => (props) => sheet.collectStyles(<App {...props} />)
);
// Step 3: Extract the styles as <style> tags
const styleTags = sheet.getStyleElement();
// Step 4: Pass styleTags as a prop
return { ...page, styleTags };
}
render() {
return (
<html>
<Head>
<title>My page</title>
{/* Step 5: Output the styles in the head */}
{this.props.styleTags}
</Head>
<body>
<Main />
<NextScript />
</body>
</html>
);
}
}
¡Feliz codificación!