Introdução ao Projeto ClimaApp
Vamos começar a trabalhar na nossa aplicação ClimaApp, onde consumiremos uma API para obter informações climáticas. Primeiro, precisamos proteger nossa chave de API no front-end. Para isso, criaremos um arquivo chamado .env.local na pasta raiz do projeto.
Configuração da Chave de API
Dentro desse arquivo, definimos uma variável de ambiente para armazenar nossa chave de API. Usamos o prefixo VITE_ porque o Vite expõe variáveis de ambiente que começam com VITE_ no front-end.
Agora, atribuímos nossa chave de API a essa variável. Lembre-se de substituir <SUA_CHAVE_DE_API> pela sua chave real.
VITE_WEATHER_API_KEY=<SUA_CHAVE_DE_API>
Importação e Uso da Chave de API
No arquivo app.jsx, fora do componente App, importamos a variável de ambiente para utilizá-la no nosso código.
const API_KEY = import.meta.env.VITE_WEATHER_API_KEY;
Configuração do Estado e Uso do useEffect
Para consumir serviços externos no React, utilizamos o hook useEffect. Antes disso, precisamos criar um estado para armazenar os dados do clima. Vamos criar um estado chamado weather e a função setWeather.
const [weather, setWeather] = useState(null)
Certifique-se de importar o useState do React.
import { useState } from "react";
Agora, vamos utilizar o useEffect, que será executado quando a aplicação for renderizada. Importamos também o useEffect.
import { useState, useEffect } from "react";
Escrevemos o useEffect e passamos uma função de callback e uma lista de dependências vazia, para que ele seja executado apenas uma vez.
Função Assíncrona para Buscar Dados da API
Dentro do useEffect, criaremos uma função assíncrona chamada fetchWeather para buscar os dados da API. Utilizaremos try-catch para lidar com possíveis erros.
useEffect(() => {
async function fetchWeather(){
try {
} catch (erro) {
console.error("Erro ao buscar dados da API", erro);
}
}
}, [])
Requisição à API e Atualização do Estado
No bloco try, faremos a requisição à API utilizando fetch. Passamos a URL da API como uma template string e interpolamos a chave da API.
const response = await fetch(
`https://api.hgbrasil.com/weather?format=json-cors&${API_KEY}&city_name=São Luis, MA`
);
Convertendo a resposta para JSON, armazenamos os dados em uma constante data.
const data = await response.json();
Verificamos se data.results existe e, se sim, atualizamos o estado weather.
if(data.results){
setWeather(data.results)
}
Chamamos a função fetchWeather dentro do useEffect para iniciar a busca dos dados.
Renderização das Informações Climáticas
Agora, vamos renderizar as informações na tela. Utilizamos uma renderização condicional para exibir os dados apenas se weather existir.
{weather && (
<>
<h1>{weather.city}</h1>
<WeatherCard weather={weather}/>
</>
)}
Componente WeatherCard
No componente WeatherCard, recebemos a prop weather e exibimos as informações climáticas.
const WeatherCard = ({ weather }) => {
Exibimos a data de hoje, a imagem do clima, a temperatura, a descrição, a umidade e as temperaturas mínimas e máximas.
<p>Hoje ({weather.forecast[0].date})</p>
<img src={`./icons-weather/${weather.condition_slug}.svg`} alt={weather.description}/>
<h2 className="temperature">{weather.temp}°</h2>
<p className="condition">{weather.description}</p>
<span>{weather.humidity}%</span>
<span>{weather.forecast[0].min}/{weather.forecast[0].max}°</span>
Teste e Correção de Erros
Após essas alterações, salvamos a aplicação e recarregamos a página no navegador. Se as informações de São Luís aparecerem corretamente, a API está funcionando. Caso contrário, verificamos o código para corrigir possíveis erros, como a falta de key= na URL da API.
const response = await fetch(
`https://api.hgbrasil.com/weather?format=json-cors&key=${API_KEY}&city_name=São Luis, MA`
);
Conclusão e Prática
Dessa forma, fazemos requisições para APIs e serviços externos utilizando React. Agora, é hora de praticar com os exercícios para consolidar os conhecimentos. Até mais!