为什么通过 props 正确传递的数组返回未定义?
2021-11-09
878
我试图通过 props 传递此数组来加载
<li>
html 标记中字符串数组的每个字符串:
<CardItem
src='https://static.news...koinex-banner.png'
text='my text'
label='Adventure'
path='/products'
description={["someText1", "someText2", "someText3", "someText4"]}
/>
function CardItem(props) {
return (
<>
<li className='cards__item'>
<Link className='cards__item__link' to={props.path}>
<figure className='cards__item__pic-wrap' data-category={props.label}>
<img
className='cards__item__img'
alt='Travel Image'
src={props.src}
/>
</figure>
<div className='cards__item__info'>
<h5 className='cards__item__text'>{props.text}</h5>
</div>
<CardDescription description={props.description} />
</Link>
</li>
</>
);
}
export default CardItem;
function CardDescription(props) {
return (
<div>
<ul>
<li>{props.description[0]} </li>
</ul>
</div>
)
}
export default CardDescription
而我得到的是
TypeError: Cannot read properties of undefined (reading '0')
我不确定为什么
props.description
prop 返回未定义。
此外,此 TypeError 似乎仅发生在
props.description
prop 中。
2个回答
您的代码拼写错误,将
CardDescrition
拼写为
CardDescription
尝试:
{props.description ? <CardDescription description={props.description} /> : ''}
并在描述中:
function CardDescription(props) {
return (
<div>
<ul>
{props.description.map(des => <li>des</li>)}
</ul>
</div>
)
}
请找到我创建的最小 repo:
https://github.com/snake-py/so-help-react-card
解释:
我尝试从我的理解来解释那里发生了什么。
当 Carditems 安装时,即使你对值进行了硬编码,它们也不会在初始渲染时传递。因此,三元检查 props 是否包含
description
数组。
我现在猜是为什么:
也许是因为它们位于
Link
的包装器组件内。如果删除
Link
组件,代码应该可以在没有初始检查的情况下工作。
Snake_py
2021-11-09
嗯,这可能是因为在安装这三个时,描述属性可能未定义,您可以通过执行以下操作来避免此错误
props?.description[0]
,此外,如果您想在 CardDescrition 组件内呈现数组中的所有值,您可以这样做
props?.description.map((item) => (<li>{item}</li>))
jhonny
2021-11-09