Criando um blog com Gatsby e React - Parte 2

5 min de leitura
Criando um blog com Gatsby e React - Parte 2

Este post é a parte 2 de uma série de posts ensinando a criar um blog com Gatsby.


Introdução

Fala pessoal! Como vocês estão? Hoje estou de volta para dar continuidade a nossa série. Então já pega o cafezinho porque hoje vamos escrever bastante código.

E conforme eu comentei no final do último post, hoje nós vamos desenvolver toda a parte visual do blog, deixando ele bonitão. Por isso, já abra o projeto e bora colocar a mão na massa.

Adicionando um reset ao site

Antes de começarmos a fazer o header, sidebar e todo o site, precisamos primeiro adicionar um reset para remover o estilo padrão dos navegadores. Para isso eu vou usar o minireset.css, que pode ser instalado com o seguinte comando:

npm install minireset.css

Ao terminar a instalação abra o index.js dentro de pages e adicione a seguinte linha de código:

import 'minireset.css';

Blog com reset aplicado

Adicionando uma fonte

Agora que temos um reset para o site vamos adicionar uma fonte para o blog, e, a escolhida da vez foi a Raleway.

Para usar uma fonte devemos primeiro importar ela, e isso pode ser feito adicionando uma tag no head do site ou adicionando um import no CSS, que é o que vamos usar. Para isso, crie um arquivo Layout.css e adicione esse código:

@import url('https://fonts.googleapis.com/css?family=Raleway:400,700');

body {
  font-family: 'Raleway', sans-serif;
  background-color: #f2f3f4;
}

html,
body {
  height: 100%;
}

p,
div {
  font-size: 16px;
}

Agora, dentro do Layout.jsx adicione o seguite código para que possamos aplicar o CSS.

import './Layout.css';

Estilizando o header

Depois de aplicarmos um reset e de termos adicionado uma fonte para o site podemos finalmente começar a deixar esse blog mais bonito, e, nada mais justo do que começarmos pelo Header. Portanto, dentro da pasta do Header crie um arquivo Header.css e adicione o CSS abaixo:

.header {
  padding: 1rem 1.5rem 1rem 1.5rem;
  display: flex;
  justify-content: flex-start;
  align-items: center;
  flex-direction: row;
  font-size: 24px;
  background-color: #ffffff;
  margin-bottom: 1rem;
}

.header a {
  text-decoration: none;
}

.header-title {
  font-weight: bold;
  color: #000000;
}

Agora vamos importar e realizar uma pequena melhoria ao nosso site. Vamos realizar a consulta do título de dentro do Header para evitar de fazermos consultas em todas as páginas que criarmos.

import React from 'react';
import { StaticQuery, graphql, Link } from 'gatsby';
import './Header.css';

export default () => (
  <StaticQuery
    query={graphql`
      query HeaderQuery {
        site {
          siteMetadata {
            title
          }
        }
      }
    `}
    render={(data) => (
      <header className="header">
        <Link to="/">
          <h1 className="header-title">{data.site.siteMetadata.title}</h1>
        </Link>
      </header>
    )}
  />
);

Lembre-se que precisamos atualizar também o index.js para remover a consulta.

import React from 'react';
import Layout from '../components/Layout';
import 'minireset.css';

export default () => (
  <Layout>
    <p>Página inicial</p>
  </Layout>
);

Se tudo transcorreu bem até o momento esse deve ser o resultado parcial.

Resultado do blog até essa parte do post
Resultado do blog até essa parte do post

Criando um container

Agora vamos criar um container para colocarmos o nosso sidebar e a nossa lista de posts.

import React from 'react';
import './Container.css';

export default ({ children }) => <div className="container">{children}</div>;
.container {
  max-width: 980px;
  display: flex;
  justify-content: space-between;
  padding: 15px;
  flex-direction: row;
  margin: 0 auto;
  margin-top: 4rem;
}
export { default } from './Container';

Dentro do Layout.jsx adicione o container de modo que ele fique ao redor do {children}. Assim, podemos compartilhar a mesma estrutura entre as todas as páginas do blog.

Criando o sidebar

Seguindo a mesma lógica dos componentes anteriores vamos criar o nosso Sidebar.

import React from 'react';
import './Sidebar.css';

export default ({ title, description }) => (
  <div className="sidebar">
    <h3 className="sidebar-title">{title}</h3>
    <p className="sidebar-description">{description}</p>
  </div>
);
.sidebar {
  padding: 1.5rem;
  margin-bottom: 1rem;
  border-radius: 0.5rem;
  background-color: #ffffff;
}

.sidebar .sidebar-title {
  font-size: 20px;
  font-weight: bold;
}

.sidebar .sidebar-description {
  text-align: justify;
  margin-top: 1rem;
  line-height: 1.5;
}
export { default } from './Sidebar';

Agora altere os arquivos Layout.jsx e Layout.css, para que possamos adicionar o Sidebar ao layout padrão.

import React from 'react';
import Header from '../Header';
import Sidebar from '../Sidebar';
import Container from '../Container';
import './Layout.css';

export default ({ children, title }) => (
  <div>
    <Header title={title} />
    <main role="main">
      <Container>
        {children}
        <aside className="aside">
          <Sidebar
            title="Sobre mim"
            description="Sou um desenvolvedor apaixonado por JavaScript e amo desenvolver produtos que melhoram a vida das pessoas."
          />
          <Sidebar
            title="Sobre o blog"
            description="Aqui você encontará muito conteúdo de FrontEnd e CSS, além de umas dicas senasacionais de carreira!"
          />
        </aside>
      </Container>
    </main>
  </div>
);
.aside {
  flex: 0 0 33.333333%;
  max-width: 33.333333%;
  flex-direction: column;
  padding: 10px;
}
Estágio atual do blog
Estágio atual do blog

Criando uma página de erro 404

Agora que temos quase toda a parte visual do nosso blog e layout pronta podemos criar páginas facilmente e compartilhar a mesma estrutura entre elas. E veja que bom, temos um site estático com uma ótima performance!

Também precisamos criar uma página de erro 404 personalizada, e, com o Gatsby isso é muito simples. Basta criar um arquivo 404.js dentro de pages e pronto.

import React from 'react';
import Layout from '../components/Layout';

export default () => (
  <Layout>
    <p>Infelizmente a página desejada não pode ser encontrada!</p>
  </Layout>
);

Se quiser testar a página basta acessar http://localhost:8000/404 ou digitar algo aleatório na url e ver a página de erro (em desenvolvimento você verá uma lista de todas as páginas do site).

Conclusão

No post de hoje criamos toda a parte visual do nosso blog, que já está pronto para começar a receber os posts e ganhar muitas funcionalidades legais. Por isso, no próximo tutorial da série vamos melhorar algumas coisas e também criar a listagem dos posts na home, além de um template para todos os posts do blog. Nos vemos lá! Deus abençoe!