Hasta este punto solo hemos estado en comunicación con nuestra API por medio de GET, en esta sección vamos a utilizar el metodo POST para crear nuevos usuarios.
Componente de Registro
Lo primero que vamos hacer es crear un nuevo componente llamado Register.jsx en nuestra carpeta components
Luego de esto, vamos actualizar la pagina de registro para usar este componente que acabamos de crear y remover todo el html del formulario que allí tenemos.
src/pages/Register.jsx
import React from 'react';
import { Link } from 'react-router-dom';
// Agregamos el componente que acabamos de crear
import FormRegister from '../components/Register';
const Register = () => (
<div className="container">
<div className="card o-hidden border-0 shadow-lg my-5">
<div className="card-body p-0">
<div className="row">
<div className="col-lg-5 d-none d-lg-block bg-register-image" />
<div className="col-lg-7">
<div className="p-5">
<div className="text-center">
<h1 className="h4 text-gray-900 mb-4">Create an Account!</h1>
</div>
{/* Remplazamos todo el html del formulario por el componente */}
<FormRegister />
<hr />
<div className="text-center">
<Link className="small" to="/login">Already have an account? Login!</Link>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
);
export default Register;
Continuaremos ahora con la función que se encargará de actualizar nuestro estado interno, cada que el input tenga un cambio.
src/components/Register.jsx
import React, { useState } from 'react';
const Register = ({ handleSumbit }) => {
const [form, setForm] = useState({});
// Funcion para actualizar cada uno de los input
const handleInputChange = (evt) => {
const { target: { name, value } } = evt;
setForm({ [name]: value, ...form });
}
return (
<form className="user" onSubmit={sendForm}>
<div className="form-group row">
<div className="col-sm-6 mb-3 mb-sm-0">
{/* Vamos agregar la funcion handleInputChange con callback del onChange */}
<input
type="text"
className="form-control form-control-user"
id="firstName"
placeholder="First Name"
name="name"
onChange={handleInputChange}
required
/>
</div>
<div className="col-sm-6">
{/* Vamos agregar la funcion handleInputChange con callback del onChange */}
<input
type="text"
className="form-control form-control-user"
id="lastName"
placeholder="Last Name"
name="lastName"
onChange={handleInputChange}
required
/>
</div>
</div>
<div className="form-group">
{/* Vamos agregar la funcion handleInputChange con callback del onChange */}
<input
type="email"
className="form-control form-control-user"
id="email"
placeholder="Email Address"
name="email"
onChange={handleInputChange}
required
/>
</div>
<div className="form-group row">
<div className="col-sm-6 mb-3 mb-sm-0">
{/* Vamos agregar la funcion handleInputChange con callback del onChange */}
<input
type="password"
className="form-control form-control-user"
id="password"
placeholder="Password"
name="password"
onChange={handleInputChange}
required
/>
</div>
<div className="col-sm-6">
{/* Vamos agregar la funcion handleInputChange con callback del onChange */}
<input
type="password"
className="form-control form-control-user"
id="confirmPassword"
placeholder="Repeat Password"
name="confirmPassword"
onChange={handleInputChange}
required
/>
</div>
</div>
<button type="submit" className="btn btn-primary btn-user btn-block">
Register Account
</button>
</form>
);
}
export default Register;
Ahora solo nos falta tener la función que se ejecutara cuando le demos clic en el boton tipo submit, vamos a crear la siguiente función, justo debajo handleInputChange.
src/components/Register.jsx
const sendForm = (evt) => {
evt.preventDefault();
// Vamos a ejecutar un callback que nos llegará como prop.
console.log(form);
}
Finalmente todo el componente Register.jsx debe verse de la siguiente forma:
En este punto si vamos a nuestro navegador y registrar un usuario por medio de la url http://localhost:3000/register deberas ver por medio de las developer tools de tu navegador el token del usuario almacenado en el localstorage.
Código de referencia: En este enlace puedes ver el commit correspondiente a este punto Github.
Retos
Actualizar el codigo de la pagina de registro para redireccionar al usuario a la pagina principal luego de ser registrado en el sistema.
Crear la funcionalidad para hacer login en el sistema.