JSFiddle - React, Tailwind, and code Playground
by Kaique Covo
HTML
<main class="container">
<h1 class="title">Buscando CEP com Fetch API</h1>
<form class="form" onsubmit="buscarCep(event, this);">
<div class="row">
<div class="form___group">
<input autofocus autocomplete="off" class="form___data" id="cep" maxlength="8" name="cep" pattern="([\d]{8})" placeholder="Digite o CEP aqui" required type="text">
<span class="form___requirement">* O campo deve ser informado com apenas números.</span>
</div>
</div>
<div class="row has-alignCenter">
<button class="form__button" type="submit">Buscar CEP</button>
</div>
</form>
</main>
CSS
:root {
--color-primary : #0099FF;
--color-text : #FDFDFD;
}
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
}
.title {
background: var(--color-primary);
color: var(--color-text);
margin: 0;
margin-bottom: 2rem;
padding: 5rem;
text-align: center;
}
.form {
padding: 1rem 5rem;
}
.form__text {
font-weight: bold;
}
.form___data {
border: 1px solid #DCDCDC;
border-radius: 3px;
color: #595959;
font-size: 2rem;
padding: 1rem 2rem;
outline: none;
width: 100%;
}
.form___data:focus {
border-color: var(--color-primary);
box-shadow: 0 0 7px rgba(0, 153, 255, .5);
}
.form___requirement {
color: #FF8080;
display: block;
font-weight: 100;
margin: .5rem .75rem;
}
.form__button {
background: var(--color-primary);
border: none;
border-radius: 5px;
color: var(--color-text);
font-size: 1.25rem;
outline: none;
padding: 1rem 2rem;
}
.form__button:hover {
background: #007ACC;
cursor: pointer;
}
.row {
width: 100%;
}
.row.has-alignCenter {
text-align: center;
}
JavaScript
function buscarCep(event, form) {
event.preventDefault();
const inputCep = form.cep;
if (inputCep) {
const cep = inputCep.value;
if (cep.length === 8) {
const URL = `https://viacep.com.br/ws/${cep}/json`;
fetch(URL)
.then(resposta => resposta.json())
.then(data => mostrarResposta(data))
.catch(erro => console.error(erro));
}
}
}
/**
Mostra o alerta com os dados
*/
function mostrarResposta(cep) {
const mensagem = `
CEP: ${cep.cep},
Logradouro: ${cep.logradouro},
Complemento: ${cep.complemento},
Bairro: ${cep.bairro},
Cidade ${cep.localidade},
Estado: ${cep.uf}
`;
alert(mensagem);
}