#reactjs
#reactjs
Вопрос:
Я получаю сообщение об ошибке: не удается прочитать свойство ‘map’ undefined, но когда я делаю консольный журнал элементов (который является массивом, используемым для сопоставления), получается нормально, что означает, что он был правильно передан через props, но внутри рендеринга он не может прочитать массив элементов для сопоставленияэто
import React from 'react';
const ListGroup = (props) => {
const { items, onItemSelect, currentGenre } = props;
console.log(items);
return (
<ul className="list-group">
{items.map((item) => (
<li
onClick={() => onItemSelect(item)}
key={item.id}
className={item === currentGenre ? 'list-group-item active' : 'list-group-item'}
>
{item.name}
</li>
))}
</ul>
);
};
export default ListGroup;
Может кто-нибудь, пожалуйста, помочь мне с этим
Комментарии:
1. Где
items
определено? Каково его начальное значение? Вы извлекаете элементы асинхронно?2. Можете ли вы предоставить результат вашего console.log?
3. откуда берутся эти элементы и каково начальное состояние этих элементов?
4. измените это с
{items.map(item=>(
на{items.length > 0 amp;amp; items.map(item=>(
5. @NishargShah если
items
значение не определено,item.length
приведет к аналогичной ошибке —>Cannot read property 'length' of undefined
Ответ №1:
Сначала вам нужно убедиться, что вы передаете правильные значения в качестве реквизитов этого компонента. В вашем случае items не определено, поэтому результатом является ошибка. Чтобы быть устойчивым к ошибкам такого типа, у вас может быть такое условие:
return (
<ul className="list-group">
{items amp;amp; items.length
? items.map((item) => (
<li
onClick={() => onItemSelect(item)}
key={item.id}
className={item === currentGenre ? 'list-group-item active' : 'list-group-item'}
>
{item.name}
</li>
))
: null}
</ul>
);
Вместо null вы возвращаете любой компонент по своему усмотрению.
Комментарии:
1. вы не можете добавить ответ после того, как OP решил это с помощью ответа другого пользователя, даже если это комментарий
2. О, извините, я не видел, что вы ответили на это в комментарии. В будущем я буду сначала читать комментарии