Как мне сделать массив объектов в реакции JS

Мой API дает мне данные в следующем формате:

{
  status: 200,
  certificateTypes: [
    {
      id: 1,
      name: 'Gasmeting',
      created_at: '2023-04-25T07:15:55.000000Z',
      updated_at: '2023-04-25T07:15:55.000000Z',
    },
    {
      id: 2,
      name: 'Mangatwacht',
      created_at: '2023-04-25T07:16:13.000000Z',
      updated_at: '2023-04-25T07:16:13.000000Z',
    },
  ],
    // ...
}

Я использовал следующую функцию, чтобы поместить данные в массив useState.

const [certificateTypes, setCertificateTypes] = useState([]);

const fetchCertificateTypes = async () => {
  const response = await getCertificateTypes();

  if (response.status === 200) {
    setCertificateTypes(response.certificateTypes);
    console.info('in fetch ' + certificateTypes);
  }
};

Теперь печатаем данные с помощью:

console.info(certificateTypes)

дает следующий результат:

[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

Моя первоначальная мысль заключалась в том, что мне нужно JSON.parse данные, которые я извлек, но, похоже, это не так.

Как превратить эти данные в массив, чтобы я мог правильно с ними работать?

вы ведете журнал, используя конкатенацию, которая приводит объекты к строкам console.info('in fetch ' + certificateTypes);. Вы можете либо отделить запятой console.info('in fetch: ', certificateTypes);, либо явно указать строку console.info('in fetch ' + JSON.stringify(certificateTypes, null, 2));

pilchard 29.04.2023 19:38

Отвечает ли это на ваш вопрос? Javascript console.info(object) и конкатенация строк

pilchard 29.04.2023 19:40

Данные уже находятся в массиве.

pilchard 29.04.2023 19:42
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
80
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Просто измените свой console.info на:

console.info('in fetch ', certificateTypes);
Ответ принят как подходящий

Когда вы пытаетесь соединить строку с переменной certificateTypes с помощью оператора +, JavaScript автоматически преобразует массив в строковое представление, то есть «[object Object]». Строковое представление массива по умолчанию — «[object Object]».

обновление состояния в ReactJS — это асинхронный процесс. Когда вы вызываете setState() для обновления состояния компонента, React планирует обновление в будущем, а не сразу. Это означает здесь, когда вы console.info('in fetch' + certificateTypes); обновленное состояние может быть недоступно сразу после вызова setCertificateTypes(response.certificateTypes).

для console.info ваших сертификатов, напишите console.info(certificateTypes) перед возвратом jsx (или где-нибудь вне useEffect);

Другие вопросы по теме