Muchos proyectos en la web deben interactuar con una API REST en algún momento en su desarrollo. Axios es un cliente HTTP ligero basado en el servicio $http
en Angular.so v1.x y es similar a la API Fetch nativa de JavaScript.
Axios se basa en promesas, lo que le permite aprovechar async
y await
de JavaScript para obtener un código asíncrono más legible.
También puede interceptar y cancelar solicitudes, y hay una protección integrada del lado del cliente contra la falsificación de solicitudes entre sitios.
En este artículo, verá ejemplos de cómo usar Axios para acceder a la popular API JSON Placeholder en una aplicación React.
Para seguir este artículo, necesitará lo siguiente:
En esta sección, añadirá Axios al proyecto digital-ocean-tutorial
de React que creó siguiendo el tutorial Cómo configurar un proyecto React con Create React App.
Para añadir Axios al proyecto, abra su terminal y cambie los directorios a su proyecto:
- cd digital-ocean-tutorial
A continuación, ejecute este comando para instalar Axios:
- npm install axios
Luego, tendrá que importar Axios al archivo en el que desea usarlo.
GET
En este ejemplo, creará un nuevo componente e importará Axios a él para enviar una solicitud GET
.
Dentro de la carpeta src
de su proyecto React, cree un nuevo componente llamado PersonList.js
:
- nano src/PersonList.js
Añada el siguiente código al componente:
import React from 'react';
import axios from 'axios';
export default class PersonList extends React.Component {
state = {
persons: []
}
componentDidMount() {
axios.get(`https://jsonplaceholder.typicode.com/users`)
.then(res => {
const persons = res.data;
this.setState({ persons });
})
}
render() {
return (
<ul>
{ this.state.persons.map(person => <li>{person.name}</li>)}
</ul>
)
}
}
Primero, debe importar React y Axios para que ambos puedan usarse en el componente. A continuación, enlazará en el enlace de ciclo de vida componentDidMount
y realizará una solicitud GET
.
Utiliza axios.get(url)
con una URL desde un endpoint API para obtener una promesa que devuelve un objeto de respuesta. Dentro del objeto de respuesta, hay datos que se asignan al valor de person
.
También puede obtener otra información sobre la solicitud, como el código de estado bajo res.status
o más información dentro de res.request
.
POST
En este paso, usará Axios con otro método de solicitud HTTP llamado POST
.
Elimine el código anterior en PersonList
y añada el siguiente para crear un formulario que permita la entrada del usuario y, posteriormente, haga POST
del contenido a una API:
import React from 'react';
import axios from 'axios';
export default class PersonList extends React.Component {
state = {
name: '',
}
handleChange = event => {
this.setState({ name: event.target.value });
}
handleSubmit = event => {
event.preventDefault();
const user = {
name: this.state.name
};
axios.post(`https://jsonplaceholder.typicode.com/users`, { user })
.then(res => {
console.log(res);
console.log(res.data);
})
}
render() {
return (
<div>
<form onSubmit={this.handleSubmit}>
<label>
Person Name:
<input type="text" name="name" onChange={this.handleChange} />
</label>
<button type="submit">Add</button>
</form>
</div>
)
}
}
Dentro de la función handleSubmit
, evita la acción predeterminada del formulario. A continuación actualice el estado
para la entrada user
.
Usar POST
le proporciona el mismo objeto de respuesta con información que puede usar dentro de una invocación then
.
Para completar la solicitud POST
, primero debe capturar la entrada user
. A continuación añade la entrada junto con la solicitud POST
, lo que le proporciona una respuesta. Luego puede hacer console.log
a la respuesta, que debería mostrar la entrada user
en el formulario.
DELETE
En este ejemplo, verá cómo eliminar elementos de una API usando axios.delete
y pasando una URL como parámetro.
Cambie el código para el formulario desde el ejemplo POST
para eliminar a un usuario en vez de añadir uno nuevo:
import React from 'react';
import axios from 'axios';
export default class PersonList 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>
Person ID:
<input type="text" name="id" onChange={this.handleChange} />
</label>
<button type="submit">Delete</button>
</form>
</div>
)
}
}
De nuevo, el objeto res
le proporciona información sobre la solicitud. Luego, puede aplicar console.log
a esta información de nuevo tras enviar el formulario.
En este ejemplo, verá cómo puede configurar una instancia base en la cual puede definir una URL y cualquier otro elemento de configuración.
Cree un archivo independiente llamado api.js
:
- nano src/api.js
Exporte una nueva instancia axios
con estos valores predeterminados:
import axios from 'axios';
export default axios.create({
baseURL: `http://jsonplaceholder.typicode.com/`
});
Una vez configurada la instancia predeterminada, puede usarse dentro del componente PersonList
. Importa la nueva instancia de esta forma:
import React from 'react';
import axios from 'axios';
import API from '../api';
export default class PersonList extends React.Component {
handleSubmit = event => {
event.preventDefault();
API.delete(`users/${this.state.id}`)
.then(res => {
console.log(res);
console.log(res.data);
})
}
}
Debido a que http://jsonplaceholder.typicode.com/
es ahora la URL base, ya no necesita escribir toda la URL cada vez que desee llegar a un endpoint diferente sobre la API.
async
y await
En este ejemplo, verá cómo puede usar async
y await
para trabajar con promesas.
La palabra clave await
resuelve promise
y devuelve value
. value
puede asignarse a una variable.
handleSubmit = async event => {
event.preventDefault();
//
const response = await API.delete(`users/${this.state.id}`);
console.log(response);
console.log(response.data);
};
En esta muestra de código, se sustituye .then()
. Se resuelve promise
, y el valor se guarda dentro de la variable response
.
En este tutorial, exploró varios ejemplos sobre cómo usar Axios dentro de una aplicación React para crear solicitudes HTTP y gestionar las respuestas.
Si desea aprender más sobre React, consulte la serie Cómo crear código en React.js, o consulte la página del tema React para ver más ejercicios y proyectos de programación.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Hola, gracias por el artículo. Actualmente estoy en un curso y tengo el siguiente mensaje. GET http://127.0.0.1:3001/persons net::ERR_CONNECTION_REFUSED No me muestra datos. De antemano, Gracias por su ayuda.