Вы сказали, что вы получаете:
{
"subjects": ["Computer Architecture", "Basic Networking"],
"_id": "5cf368bfb58f8c35bc19cebc",
"name": "Software Engineering",
"passmark": 75,
"lectureIncharge": "John Smith",
"__v": 0
}
Ваш setState
вызов устанавливает data
для этого объекта, который не является массивом.
Ваш код render
ожидает, что это будет массив. Он пытается перебрать его и использовать для заполнения строк в таблице. Но вы получаете только один фрагмент данных: один курс ("Software Engineering"
), который охватывает два предмета ("Computer Architecture"
и "Basic Networking"
).
Так что ваш код render
не должен пытаться использовать его как массив (и поэтому вам больше не понадобится таблица). Он должен просто использовать data
name
и subjects
свойства напрямую.
Я пока оставлю разметку вашей таблицы, но учтите, что при этом получается только одна строка (потому что есть только один фрагмент данных). До return
я бы взял курс:
const course = this.state.data;
то, куда вы выводите свою таблицу:
<tbody>
{course && course.name
? undefined
:
<tr>
<td key={course.id}>{course.name}</td>{" "}
<td key={course.id}>{course.subjects.join(", ")}</td>{" "}
</tr>
}
</tbody>
Я использовал явное join(", ")
, чтобы присоединиться к темам, а не неявным образом через toString
, который не будет содержать пробел после запятой.