Example app with styled-components

This example features how you use a different styling solution than styled-jsx that also supports universal styles. That means we can serve the required styles for the first render within the HTML and then load the rest in the client. In this case we are using styled-components.

For this purpose we are extending the <Document /> and injecting the server side rendered styles into the <head>, and also adding the babel-plugin-styled-components (which is required for server side rendering). Additionally we set up a global theme for styled-components using NextJS custom <App> component.

Preview

Preview the example live on StackBlitz:

Open in StackBlitz

Deploy your own

Deploy the example using Vercel:

Deploy with Vercel

How to use

Execute create-next-app with npm or Yarn to bootstrap the example:

npx create-next-app --example with-styled-components with-styled-components-app
# or
yarn create next-app --example with-styled-components with-styled-components-app

Deploy it to the cloud with Vercel (Documentation).

Try it on CodeSandbox

Open this example on CodeSandbox

Notes

When wrapping a Link from next/link within a styled-component, the as prop provided by styled will collide with the Link's as prop and cause styled-components to throw an Invalid tag error. To avoid this, you can either use the recommended forwardedAs prop from styled-components or use a different named prop to pass to a styled Link.

Click to expand workaround example

components/StyledLink.js

import Link from 'next/link'
import styled from 'styled-components'

const StyledLink = ({ as, children, className, href }) => (
  <Link href={href} as={as} passHref>
    <a className={className}>{children}</a>
  </Link>
)

export default styled(StyledLink)`
  color: #0075e0;
  text-decoration: none;
  transition: all 0.2s ease-in-out;

  &:hover {
    color: #40a9ff;
  }

  &:focus {
    color: #40a9ff;
    outline: none;
    border: 0;
  }
`

pages/index.js

import StyledLink from '../components/StyledLink'

export default () => (
  <StyledLink href="/post/[pid]" forwardedAs="/post/abc">
    First post
  </StyledLink>
)
query { allCommunities { title id imageUrl creatorSlug } } http://localhost:3000/api/communities
jwt.io
* Add cookies - nookies - Pegar os dados da API do GitHub e listar seus seguidores - Adicionar quão confiável, legal e sexy você é - Usar Strategy ao invés de vários ifs no css - https://www.youtube.com/watch?v=S-jqd6WZ7M0 - Separar e organizar o seu código - Publicar o seu projeto - Deixar o seu projeto com a sua cara - Criar suas comunidades para compartilhar com a gente; - Facilitar o cadastro da url da imagem; - Adicionar links para as suas comunidades - Adicionar o seu projeto na nossa vitrine; - Deixar o seu read me do projeto bonitão. - Terminar de listar seus seguidores através da api do Github; - Adicionar suas comunidades no DatoCMS; - Organizar os seus dados, pensando no que irá querer que apareça no seu Alurakut e criando os modelos que precisar; - Subir sua aplicação na Vercel. Variaveis de ambiente - https://www.youtube.com/watch?v=BP2KQtCyzo8 Configurar suas variáveis de ambiente; Fazer os scraps; Subir sua aplicação na Vercel. - Fazer o logout da aplicação; - Mensagem de feedback quando não conseguir logar na aplicação; - Criar página de perfil do usuário; - Subir a sua aplicação na Vercel e compartilhar com a gente. https://github.com/settings/developers

</site_about_login> https://vercel.com/docs/environment-variables //Organize // Generic image // http://picsum.photos/200/300 // dogstatus //https://www.datocms.com //https://temp-mail.org Add login via Google / GitHub etc Change the GitHubApi to Cassandra