Гид по технологиям

Создание таблицы React из JSON

4 min read Frontend Обновлено 18 Dec 2025
React: таблица из JSON
React: таблица из JSON

Таблица с примерными данными: id, имя, фамилия и email

Что потребуется

  • Node.js и среда разработки (например, VS Code).
  • Базовые знания React (компоненты, props, map).
  • Проект React (create-react-app или аналогичный).

Важно: данные можно хранить локально в data.json или получать с API через fetch/axios.

Создание JSON‑файла

В папке src создайте файл data.json. Это простой локальный пример данных — в реальном приложении вы, вероятно, будете делать запрос к API.

[{
  "id": 1,
  "first_name": "Ethelred",
  "last_name": "Slowly",
  "email": "eslowly0@google.es"
}, {
  "id": 2,
  "first_name": "Reta",
  "last_name": "Woolmer",
  "email": "rwoolmer1@miibeian.gov.cn"
}, {
  "id": 3,
  "first_name": "Arabel",
  "last_name": "Pestor",
  "email": "apestor2@bloglovin.com"
}]

Описание: каждый объект представляет строку таблицы; ключи объектов будут использованы как заголовки столбцов.

Компонент Table — минимальная структура

Создайте src/Table.js и начните с базовой оболочки компонента, который принимает theadData и tbodyData как props.

export default function Table({ theadData, tbodyData }) {
  return (
    
          {/* header row */}
        
        {/* body data */}
      
); }

Коротко: theadData — массив ключей/заголовков, tbodyData — массив объектов с данными.

Получение заголовков в App.js

Чтобы автоматически взять заголовки из JSON, используйте ключи первого объекта:

import data from "./data.json";

const getHeadings = () => {
  return Object.keys(data[0]);
}

Затем передайте их в компонент Table:

Создание строки заголовка

Внутри Table.js отрисуйте заголовки через map:

{theadData.map(heading => { return })}

Совет: при желании преобразуйте ключи в человекочитаемые названия (например, replace ‘_’ на ‘ ‘ и capitalize).

Создание строк тела таблицы

Теперь отрисуем строки данных. Сначала пробегаемся по массиву объектов, затем по ключам (theadData), чтобы сохранить порядок столбцов:

{tbodyData.map((row, rowIndex) => { return ( {theadData.map((key) => { return })} ); })}

Полный компонент Table (собранный):

export default function Table({ theadData, tbodyData }) {
  return (
    
{heading}
{row[key]}
{theadData.map(heading => { return })} {tbodyData.map((row, index) => { return ( {theadData.map((key) => { return })} ); })}
{heading}
{row[key]}
); }

Примечание: для ключей элементов используем комбинацию key+index — это уменьшает риск конфликтов при одинаковых значениях.

Использование компонента в App.js

Пример App.js, где импортируется Table и data.json:

import Table from "./Table";
import data from "./data.json";

function App() {
  const getHeadings = () => {
    return Object.keys(data[0]);
  }

  return (
    
); } export default App;

Стилизация: CSS Modules и улучшения UX

Чтобы избежать глобальных конфликтов стилей, используйте CSS Modules. Создайте файл Table.module.css и импортируйте его в Table.js:

/* Table.module.css */
.table { border-collapse: collapse; width: 100%; }
.th, .td { padding: 8px; border: 1px solid #ddd; }
thead { background: #f5f5f5; }

И в Table.js:

import styles from "./Table.module.css";

...

UX‑улучшения, которые можно добавить:

  • сортировка по столбцу (по клику на заголовок),
  • пагинация для больших массивов,
  • фильтрация/поиск,
  • загрузка данных асинхронно с индикатором загрузки.

Отладка, тесты и критерии приёмки

Критерии приёмки:

  • таблица рендерит все объекты из JSON; порядок столбцов соответствует theadData;
  • нет JS ошибок в консоли при пустом массиве (обрабатывайте data.length === 0);
  • ключи элементов уникальны (нет предупреждений React о key).

Тесты (ручные):

  • подмените data.json на пустой массив — компонент не падает и показывает сообщение «Данные отсутствуют»;
  • добавьте объект с дополнительным ключом — он не появится, если headings берутся только из первого объекта (или появится, если реализовать объединение ключей).

Когда этот подход не подходит (контрпример)

  • Если у вас многострочные/сложные ячейки (вложенные объекты или массивы), простой рендер value как строка может быть недостаточен — нужно писать кастомные ячейки.
  • Если JSON приходит с непредсказуемыми ключами и вы хотите фиксированную структуру — лучше определить схему столбцов вручную.

Альтернативные подходы

  1. Использовать специализированные таблицы (react-table, AG Grid) для фильтрации, сортировки, виртуализации.
  2. Генерировать колонки на основе схемы (schema-driven) вместо ключей первого объекта.
  3. Серверная отрисовка (SSR) для SEO: рендерить таблицу на сервере.

Мини‑методология — как внедрять в проект (быстрая инструкция)

  1. Определите источник данных (локально / API).
  2. Решите, брать ли заголовки автоматически или задать вручную.
  3. Сделайте компонент Table чистым (pure) — все данные приходят через props.
  4. Добавьте обработку ошибок и состояния загрузки.
  5. Напишите визуальные тесты (Snapshot) и ручные сценарии (см. критерии приёмки).

Важно: не доверяйте любым данным извне без валидации перед рендером.

Decision flow (краткая схема)

flowchart TD
  A[Есть JSON с одинаковыми ключами?] -->|Да| B[Берём Object.keys'data[0]']
  A -->|Нет| C[Определяем схему колонок вручную]
  B --> D[Рендер таблицы через map]
  C --> D
  D --> E{Нужна пагинация/фильтр?}
  E -->|Да| F[Интегрируем UI/логики]
  E -->|Нет| G[Оставляем простую таблицу]

Чек‑лист ролей (быстро)

  • Разработчик: реализовать компонент, обработку пустого состояния, тесты.
  • Дизайнер: согласовать вид таблицы и состояния ошибок.
  • Тестировщик: проверить сортировку, пагинацию, рендер при больших объёмах.

Советы по безопасности и приватности

  • Если выводите emails или персональные данные, соблюдайте политики конфиденциальности и не логируйте лишнее.
  • Санитизируйте данные перед рендером, если есть риск вставки HTML.

Итог

Вы реализовали компонент, который автоматически строит таблицу по ключам JSON. Это простой и гибкий способ держать данные отдельно от разметки — удобно для прототипов и небольших приложений. Для продакшна рассмотрите добавление сортировки, пагинации, виртуализации и использование проверенных библиотек, если нужно много функционала.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство