URL: https://www.progressiverobot.com/react-axios-react-ru/

Введение

Многим веб-проектам на некотором этапе их развития требуется взаимодействие с REST API. Axios — это облегченный клиент HTTP на базе сервиса $http с Angular.js v1.x, похожего на собственный JavaScript Fetch API.

Axios основан на промисах, что дает вам возможность использовать возможности JavaScript async и await для получения более удобочитаемого асинхронного кода.

Вы можете перехватывать и отменять запросы, также в клиенте имеется встроенная защита от подделки запросов между сайтами.

В этой статье вы увидите примеры использования Axios для доступа к популярному JSON Placeholder API из приложения React.

Предварительные требования

axios illustration for: Предварительные требования

Чтобы следовать за примерами этой статьи, вам потребуется следующее:

  • Также вам нужно понимать основы языка JavaScript, для изучения которого вам подойдет серия Программирование на JavaScript, а также обладать базовыми знаниями языков HTML и CSS.

Шаг 1 — Добавление Axios в проект

В этом разделе мы добавим Axios в проект React <^>the cloud provider-tutorial<^>, созданный вами при выполнении учебного модуля Настройка проекта React Project с помощью приложения Create React App.

Чтобы добавить Axios в проект, откройте терминал и поменяйте каталоги в вашем проекте:

				
					
cd &lt;^&gt;the cloud provider-tutorial&lt;^&gt;

				
			

Затем запустите эту команду для установки Axios:

				
					
npm install axios

				
			

Далее вам потребуется импортировать Axios в файл, где вы захотите его использовать.

Шаг 2 — Создание запроса GET

В этом примере мы создадим новый компонент и импортируем в него Axios для отправки запроса GET.

Создайте в папке src вашего проекта React новый компонент с именем PersonList.js:

				
					
nano src/PersonList.js

				
			

Добавьте в компонент следующий код:

				
					
[label the cloud provider-tutorial/src/PersonList.js]

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 =&gt; {

        const persons = res.data;

        this.setState({ persons });

      })

  }



  render() {

    return (

      &lt;ul&gt;

        { this.state.persons.map(person =&gt; &lt;li&gt;{person.name}&lt;/li&gt;)}

      &lt;/ul&gt;

    )

  }

}

				
			

Вначале вы импортируете React и Axios так, чтобы их можно было использовать в компоненте. Затем вы прикрепляетесь к крюку жизненного цикла componentDidMount и выполняете запрос GET.

Вы используете axios.get(url) с URL от конечной точки API, чтобы получить промис, возвращающий объект ответа. Внутри объекта ответа имеются данные, которым присвоено значение person.

Также вы можете получить и другую информацию о запросе, в том числе код состояния res.status, или дополнительную информацию внутри res.request.

Шаг 3 — Составление запроса POST

На этом шаге мы используем Axios с еще одним методом запросов HTTP, а именно POST.

Удалите предыдущий код в PersonList и добавьте следующий код, чтобы создать форму для ввода данных пользователя и последующей отправки контента в API методом POST:

				
					
[label the cloud provider-tutorial/src/PersonList.js]



import React from 'react';

import axios from 'axios';



export default class PersonList extends React.Component {

  state = {

    name: '',

  }



  handleChange = event =&gt; {

    this.setState({ name: event.target.value });

  }



  handleSubmit = event =&gt; {

    event.preventDefault();



    const user = {

      name: this.state.name

    };



    axios.post(`https://jsonplaceholder.typicode.com/users`, { user })

      .then(res =&gt; {

        console.log(res);

        console.log(res.data);

      })

  }



  render() {

    return (

      &lt;div&gt;

        &lt;form onSubmit={this.handleSubmit}&gt;

          &lt;label&gt;

            Person Name:

            &lt;input type="text" name="name" onChange={this.handleChange} /&gt;

          &lt;/label&gt;

          &lt;button type="submit"&gt;Add&lt;/button&gt;

        &lt;/form&gt;

      &lt;/div&gt;

    )

  }

}

				
			

Внутри функции handleSubmit вы предотвратили действие формы по умолчанию. Затем следует обновить state на ввод user.

Использование POST дает тот же объект ответа с информацией, которую вы сможете использовать внутри вызова then.

Чтобы выполнить запрос POST, мы вначале захватываем ввод user. Затем мы добавляем ввод вместе с запросом POST и получаем ответ. Вы можете отправить ответ в console.log, где ввод user будет показан в форме.

Шаг 4 — Создание запроса DELETE

В этом примере вы видите, как удалять элементы из API, используя axios.delete и передавая URL как параметр.

Измените код формы из примера POST, чтобы удалить пользователя вместо добавления нового:

				
					
[label the cloud provider-tutorial/src/PersonList.js]



import React from 'react';

import axios from 'axios';



export default class PersonList extends React.Component {

  state = {

    id: '',

  }



  handleChange = event =&gt; {

    &lt;^&gt;this.setState({ id: event.target.value });&lt;^&gt;

  }



  handleSubmit = event =&gt; {

    event.preventDefault();



    &lt;^&gt;axios.delete(`https://jsonplaceholder.typicode.com/users/${this.state.id}`)&lt;^&gt;

      .then(res =&gt; {

        console.log(res);

        console.log(res.data);

      })

  }



  render() {

    return (

      &lt;div&gt;

        &lt;form onSubmit={this.handleSubmit}&gt;

          &lt;^&gt;&lt;label&gt;&lt;^&gt;

            &lt;^&gt;Person ID:&lt;^&gt;

            &lt;^&gt;&lt;input type="text" name="id" onChange={this.handleChange} /&gt;&lt;^&gt;

          &lt;^&gt;&lt;/label&gt;&lt;^&gt;

          &lt;^&gt;&lt;button type="submit"&gt;Delete&lt;/button&gt;&lt;^&gt;

        &lt;/form&gt;

      &lt;/div&gt;

    )

  }

}

				
			

В этом случае объект res предоставляет информацию о запросе. Затем вы можете снова использовать console.log для этой информации после отправки формы.

Шаг 5 — Использование базового экземпляра в Axios

В этом примере вы видите, как можно создать _базовый экземпляр_, в котором вы можете задать определение URL-адреса и любых других элементов конфигурации.

Создайте отдельный файл с именем api.js:

				
					
nano src/api.js

				
			

Экспортируйте новый экземпляр axios со следующими значениями по умолчанию:

				
					
[label the cloud provider-tutorial/src/api.js]

import axios from 'axios';



export default axios.create({

  baseURL: `http://jsonplaceholder.typicode.com/`

});

				
			

После настройки экземпляра по умолчанию его можно использовать внутри компонента PersonList. Новый экземпляр импортируется следующим образом:

				
					
[label the cloud provider-tutorial/src/PersonList.js]

import React from 'react';

import axios from 'axios';



&lt;^&gt;import API from '../api';&lt;^&gt;



export default class PersonList extends React.Component {

  handleSubmit = event =&gt; {

    event.preventDefault();



    &lt;^&gt;API.delete(`users/${this.state.id}`)&lt;^&gt;

      .then(res =&gt; {

        console.log(res);

        console.log(res.data);

      })

  }

}

				
			

Поскольку http://jsonplaceholder.typicode.com/ теперь является базовым URL, вам больше не потребуется вводить URL полностью каждый раз, когда вы захотите использовать другую конечную точку API.

Шаг 6 — Использование async и await

В этом примере вы видите, как использовать async и await для работы с промисами.

Ключевое слово await разрешает промис и возвращает значение. Затем значение может быть присвоено переменной.

				
					
handleSubmit = async event =&gt; {

  event.preventDefault();



  //

  const response = await API.delete(`users/${this.state.id}`);



  console.log(response);

  console.log(response.data);

};

				
			

В этом примере кода выполняется замена .then(). Промис разрешается, и его значение сохраняется в переменной response.

Заключение

В этом учебном модуле мы изучили несколько примеров использования Axios в приложении React для создания запросов HTTP и ответов обработки.

Если вы хотите узнать больше о React, ознакомьтесь с серией Программирование на React.js или посмотрите страницу темы React, где вы найдете дополнительные упражнения и проекты для программирования.