Мой 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 данные, которые я извлек, но, похоже, это не так.
Как превратить эти данные в массив, чтобы я мог правильно с ними работать?
Отвечает ли это на ваш вопрос? Javascript console.info(object) и конкатенация строк
Данные уже находятся в массиве.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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