Подробное руководство по извлечению и отправке данных в React.js с помощью стилей Axios и Tailwind CSS

Подробное руководство по извлечению, получению, отправке и изменению данных в React.js с помощью стилей Axios и Tailwind CSS

В веб-разработке выборка, получение, отправка и изменение данных являются общими задачами, необходимыми для создания интерактивных и динамических веб-приложений. Одной из популярных библиотек для выполнения HTTP-запросов в JavaScript является Axios, которую можно использовать в сочетании с Promise и Try-Catch для обработки асинхронных операций и ошибок более удобным для чтения и сопровождения способом. В этом сообщении блога мы рассмотрим, как использовать Axios, Promise и Try-Catch в React.js для извлечения, получения, отправки и изменения данных из API JSONPlaceholder, а также добавить некоторые стили CSS к нашим компонентам с помощью Tailwind CSS.

1. Настройте проект и установите зависимости.

Для начала нам нужно создать новый проект React.js с помощью Create React App, инструмента с интерфейсом командной строки, который настраивает новый проект с базовой структурой папок и файлами конфигурации. Откройте терминал или командную строку и выполните следующие команды:

npx create-react-app axios-tutorial
cd axios-tutorial

После создания проекта мы можем установить необходимые зависимости, выполнив следующую команду:

npm install axios tailwindcss

Axios — это облегченная клиентская библиотека HTTP, которая поддерживает все современные браузеры и предоставляет простой API для выполнения HTTP-запросов. Tailwind CSS — это ориентированная на утилиты среда CSS, которая позволяет нам быстро и эффективно стилизовать наши компоненты, применяя предварительно определенные классы.

2. Создайте новый компонент для получения данных

В этом руководстве мы создадим новый компонент с именем FetchData, который извлекает данные из API JSONPlaceholder и отображает их в таблице. Чтобы создать компонент, откройте папку src и создайте новый файл с именем FetchData.js. Затем добавьте следующий код:

import React, { useState, useEffect } from "react";
import axios from "axios";

const FetchData = () => {
  const [users, setUsers] = useState([]);

  useEffect(() => {
    axios
      .get("https://jsonplaceholder.typicode.com/users")
      .then((response) => setUsers(response.data))
      .catch((error) => console.log(error));
  }, []);

  return (
    <div className="container mx-auto mt-4">
      <h1 className="text-2xl font-bold mb-4">Fetch Data Example</h1>
      <table className="table-auto">
        <thead>
          <tr>
            <th className="px-4 py-2">ID</th>
            <th className="px-4 py-2">Name</th>
            <th className="px-4 py-2">Email</th>
            <th className="px-4 py-2">Website</th>
          </tr>
        </thead>
        <tbody>
          {users.map((user) => (
            <tr key={user.id}>
              <td className="border px-4 py-2">{user.id}</td>
              <td className="border px-4 py-2">{user.name}</td>
              <td className="border px-4 py-2">{user.email}</td>
              <td className="border px-4 py-2">{user.website}</td>
            </tr>
          ))}
        </tbody>
      </table>
    </div>
  );
};

export default FetchData;

Разберем код:

  • Мы импортируем React, useState, useEffect и axios из соответствующих пакетов.
  • Мы определяем функциональный компонент с именем FetchData, который возвращает некоторый JSX.
  • Мы используем хук useState для создания переменной состояния с именем users, которая инициализируется как пустой массив.
  • Мы используем хук useEffect для получения данных из JSONPlaceholder API при монтировании компонента. Мы делаем запрос GET к конечной точке /users и устанавливаем переменную состояния users в данные ответа с помощью функции setUsers. Мы также отлавливаем любые ошибки, которые могут возникнуть, и записываем их в консоль.
  • Мы визуализируем контейнер <div> с заголовком и элемент <table>, отображающий данные в табличном формате. Мы сопоставляем массив users, используя метод map, чтобы отображать новую строку таблицы для каждого пользовательского объекта. В каждой строке отображается идентификатор пользователя, имя, адрес электронной почты и веб-сайт.

3. Добавьте компонент в файл App.js.

Чтобы увидеть компонент FetchData в действии, нам нужно добавить его в файл App.js. Откройте файл и замените существующий код следующим:

import React from "react";
import FetchData from "./FetchData";

function App() {
  return (
    <div className="container mx-auto mt-4">
      <FetchData />
    </div>
  );
}

export default App;

Здесь мы импортируем компонент FetchData из файла FetchData.js и визуализируем его внутри элемента контейнера <div>.

4. Запустите приложение и протестируйте компонент

Чтобы протестировать компонент, нам нужно запустить сервер разработки, выполнив следующую команду:

npm start

Это должно открыть новое окно браузера с URL-адресом https://localhost:3000/ и отобразить компонент FetchData с таблицей пользовательских данных.

5. Создайте новый компонент для отправки и изменения данных

Мы также создадим новый компонент с именем SendData, который позволит нам отправлять данные в JSONPlaceholder API и изменять существующее имя пользователя. Чтобы создать компонент, откройте папку src и создайте новый файл с именем SendData.js. Затем добавьте следующий код:

import React, { useState } from "react";
import axios from "axios";

const SendData = () => {
  const [name, setName] = useState("");
  const [id, setId] = useState("");
  const [message, setMessage] = useState("");

  const handleSubmit = (e) => {
    e.preventDefault();

    axios
      .put(`https://jsonplaceholder.typicode.com/users/${id}`, { name })
      .then((response) =>
        setMessage(`User ${id} name changed to ${response.data.name}`)
      )
      .catch((error) => setMessage(error.message));

    setName("");
    setId("");
  };

  return (
    <div className="container mx-auto mt-4">
      <h1 className="text-2xl font-bold mb-4">Send Data Example</h1>
      <form onSubmit={handleSubmit}>
        <div className="flex flex-col mb-4">
          <label htmlFor="name" className="mb-2">
            Name
          </label>
          <input
            type="text"
            id="name"
            value={name}
            onChange={(e) => setName(e.target.value)}
            className="border border-gray-400 py-2 px-3"
          />
        </div>
        <div className="flex flex-col mb-4">
          <label htmlFor="id" className="mb-2">
            ID
          </label>
          <input
            type="text"
            id="id"
            value={id}
            onChange={(e) => setId(e.target.value)}
            className="border border-gray-400 py-2 px-3"
          />
        </div>
        <button type="submit" className="bg-blue-500 text-white py-2 px-4">
          Submit
        </button>
     </form>
    {message && (
      <p className="text-green-500 mt-4">{message}</p>
    )}
</div>);
};

export default SendData;

В этом компоненте мы используем хук useState для создания переменных состояния для имени пользователя, идентификатора и сообщения, которое будет отображаться при отправке формы. Мы также создаем функцию handleSubmit, которая делает запрос PUT к конечной точке /users/:id для обновления имени пользователя. Мы используем метод axios.put и передаем идентификатор пользователя и новое имя в качестве данных.

Когда запрос выполнен успешно, мы устанавливаем переменную состояния message в строку, которая подтверждает изменение имени. Если возникает ошибка, мы устанавливаем переменную состояния message в сообщение об ошибке.

В операторе return мы отображаем форму с двумя полями ввода для имени пользователя и идентификатора. Мы также визуализируем кнопку отправки, которая запускает функцию handleSubmit при нажатии. Наконец, мы визуализируем переменную состояния message под формой.

6. Добавьте новый компонент в файл App.js.

Чтобы увидеть компонент SendData в действии, нам нужно добавить его в файл App.js. Откройте файл и замените существующий код следующим:

import React from "react";
import FetchData from "./FetchData";
import SendData from "./SendData";

function App() {
  return (
    <div className="container mx-auto mt-4">
      <FetchData />
      <SendData />
    </div>
  );
}

export default App;

Здесь мы импортируем компонент SendData из файла SendData.js и визуализируем его под компонентом FetchData внутри элемента-контейнера <div>.

7. Запустите приложение и протестируйте компоненты

Чтобы протестировать компонент SendData, введите идентификатор пользователя и новое имя в поля ввода и нажмите кнопку отправки. Если запрос выполнен успешно, вы должны увидеть подтверждающее сообщение под формой.

Заключение

В этом руководстве мы узнали, как использовать Axios, Promises и Try-Catch для извлечения, отправки и изменения данных из API в приложении React.js. Мы также использовали Tailwind CSS для стилизации компонентов и отображения данных в удобном для пользователя формате. Выполнив эти шаги, вы теперь сможете создавать аналогичные компоненты и использовать их для взаимодействия с другими API.