开发者问题收集

为什么通过 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