#javascript #reactjs
#javascript #reactjs
Вопрос:
Я не вижу, чего мне не хватает, но это выдает мне ошибку «Не удается прочитать свойство ‘map’ неопределенного значения. Консоль показывает, что она находится в этом разделе «
export const showDataOnMap = (data, caseType = "cases") =>
data.map((country) => (
<Circle
center={[country.countryInfo.lat, country.countryInfo.long]}
color={caseTypeColors[caseType].hex}
fillColor={caseTypeColors[caseType].hex}
fillOpacity={0.4}
radius={
Math.sqrt(country[caseType]) * caseTypeColors[caseType].multiplier
}
>
<Popup>
<div className="info-container">
<div
className="info-flag"
style={{ backgroundImage: `url(${country.countryInfo.flag})` }}
></div>
<div className="info-name">{country.country}</div>
<div className="info-confirmed">
Cases: {numeral(country.cases).format("0,0")}
</div>
<div className="info-recovered">
Recovered: {numeral(country.recovered).format("0,0")}
</div>
<div className="info-deaths">
Deaths: {numeral(country.deaths).format("0,0")}
</div>
</div>
</Popup>
</Circle>
));
Комментарии:
1.
data
не определено.. Вам нужно будет гарантировать его массив или проверить его существование перед использованием методов массива :data amp;amp; data.map
. Это частая проблема при работе с асинхронными данными. Еслиdata
заполняется из вызова ajax, он может изначально не быть массивом.2. Предполагая, что
data
это часть состояния в родительском компоненте, просто позвольте ему начинаться как[]
Ответ №1:
Вы можете сделать любое из этих действий:
- Установите пустой массив в качестве значения по умолчанию для
data
, например, так:
export const showDataOnMap = (data = [], caseType = "cases") =>
- Или, в качестве альтернативы, проверьте
data
, определено ли оно перед его использованием:
data amp;amp; data.map((country) => (
Также примечание — не забудьте поместить ключи в возвращаемый элемент при использовании map
:
<Circle
key={} // <-- add some unique value from the item here
center={[country.countryInfo.lat, country.countryInfo.long]}
color={caseTypeColors[caseType].hex}
fillColor={caseTypeColors[caseType].hex}
fillOpacity={0.4}
radius={
Math.sqrt(country[caseType]) * caseTypeColors[caseType].multiplier
}
>