En este post aprenderemos como realizar un componente en react cuyo objetivo es utilizar axios para mostrar información contenida en un API externo a la aplicación.
¿Qué vamos a necesitar?
- ReactJs
- Axios
- Un navegador
Primero instalamos axios, que es una librería que nos sirve para hacer requests http a los APIs que queremos consultar.
npm install axios --save
GET Requests
Si luego creamos un nuevo componente llamado ListaPersonas, podremos hacer uso del hook componentDidMount en el ciclo de vida y realizar una solicitud GET después de importar axios.
import React from 'react';
import axios from 'axios';
export default class ListaPersonas extends React.Component {
state = {
personas: []
}
componentDidMount() {
axios.get(`https://jsonplaceholder.typicode.com/users`)
.then(res => {
const personas = res.data;
this.setState({ personas });
})
}
render() {
return (
<div>
{ this.state.personas.map(persona =>{persona.name})}
</div>
)
}
}
Usando axios.get(url) obtenemos una promesa que devuelve un objeto de respuesta. Mientras buscamos los datos de respuesta, asignamos el valor de persona a res.data.
También podemos obtener otra información sobre nuestra solicitud, como el código de estado bajo res.status o más información dentro de res.request.
POST Requests
Podemos manejar otros verbos como POST y PUT de manera similar. Vamos a crear un formulario que reciba algunos datos del usuario y, posteriormente, enviamos el contenido a una API:
import React from 'react';
import axios from 'axios';
export default class ListaPersonas extends React.Component {
state = {
name: '',
}
handleChange = event => {
this.setState({ name: event.target.value });
}
handleSubmit = event => {
event.preventDefault();
const usuario = {
name: this.state.name
};
axios.post(`https://jsonplaceholder.typicode.com/users`, { usuario })
.then(res => {
console.log(res);
console.log(res.data);
})
}
render() {
return (
<div>
<form onSubmit={this.handleSubmit}>
<label>
Nombre:
<input type="text" name="name" onChange={this.handleChange} />
</label>
<button type="submit">Agregar</button>
</form>
</div>
)
}
}
El uso de POST nos brinda el mismo objeto de respuesta con información que podemos usar dentro de nuestra llamada.
DELETE Requests
import React from 'react';
import axios from 'axios';
export default class ListaPersonas extends React.Component {
state = {
id: '',
}
handleChange = event => {
this.setState({ id: event.target.value });
}
handleSubmit = event => {
event.preventDefault();
axios.delete(`https://jsonplaceholder.typicode.com/users/${this.state.id}`)
.then(res => {
console.log(res);
console.log(res.data);
})
}
render() {
return (
<div>
<form onSubmit={this.handleSubmit}>
<label>
ID De la Persona:
<input type="text" name="id" onChange={this.handleChange} />
</label>
<button type="submit">Borrar</button>
</form>
</div>
)
}
}
Una vez más, nuestro objeto res nos proporciona información sobre nuestra solicitud.
Instancia Base
Axios nos permite definir una instancia base en la que podemos definir una URL y cualquier otro elemento de configuración. Vamos a crear un archivo llamado api.js y exportar una nueva instancia de axios con estos valores predeterminados:
import axios from 'axios';
export default axios.create({
baseURL: `http://jsonplaceholder.typicode.com/`
});
Luego se puede usar dentro de nuestro componente al importar nuestra nueva instancia de la siguiente manera:
import API from '../api';
export default class ListaPersonas extends React.Component {
handleSubmit = event => {
event.preventDefault();
API.delete(`users/${this.state.id}`)
.then(res => {
console.log(res);
console.log(res.data);
})
}
}
Usando Async y Await
Podemos hacer que trabajar con promesas sea aún más sencillo con async y await. La palabra clave await resuelve la promesa y devuelve el valor que podemos asignar a una variable. Aquí hay un ejemplo:
handleSubmit = async event => {
event.preventDefault();
// Promise is resolved and value is inside of the response const.
const response = await API.delete(`users/${this.state.id}`);
console.log(response);
console.log(response.data);
};
no se ve nada arreglen eso