为啥通过 props 正确传递的数组返回 undefined?

Posted

技术标签:

【中文标题】为啥通过 props 正确传递的数组返回 undefined?【英文标题】:Why is an array that is passed correctly via props returning undefined?为什么通过 props 正确传递的数组返回 undefined? 【发布时间】:2021-12-22 14:56:48 【问题描述】:

我正在尝试通过 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 属性返回 undefined。

此外,这个 TypeError 似乎只发生在 props.description 属性上。

【问题讨论】:

我无法复制。此外,您可能想要修复拼写。 CardDescrition 你从哪里得到错误? 【参考方案1】:

您的代码将CardDescrition 拼错为CardDescription

试试:

props.description ? <CardDescription description=props.description /> : ''

并在描述中:

function CardDescription(props) 
    return (
        <div>
            <ul>
                props.description.map(des => <li>des</li>)
            </ul>
        </div>
    )

请找到我创建的最小仓库:

https://github.com/snake-py/so-help-react-card

解释:

我试图根据我的理解解释那里发生的事情。

当 Carditems 挂载时,即使您对值进行硬编码,它们似乎也不会在初始渲染时传递。因此,三元检查 props 是否包含 description 数组。

我现在猜为什么会这样:

可能是因为它们位于Link 的包装组件中。如果您删除 Link 组件,代码应该可以在没有初始检查的情况下工作。

【讨论】:

感谢您的回复!我收到 TypeError: Cannot read properties of undefined (reading 'map') 我做了一个最小的 repo,我注意到你的代码中还有一个错字。 github.com/snake-py/so-help-react-card 哦,我刚刚注意到,我没有推送代码。对不起,现在一切都应该在那里了。 天哪,它确实有效!太感谢了!!你愿意详细说明问题是什么吗? 我添加了一个解释,不确定是否正确。也许有更多经验的人可以绕过并证实我的猜测。【参考方案2】:

好吧,这可能是因为在安装这三个过程中,描述道具可能未定义,您可以通过执行此操作来避免此错误props?.description[0],如果您想在 CardDescrition 组件内呈现数组中的所有值,您可以这样做

   props?.description.map((item) => (<li>item</li>))

【讨论】:

嗨,乔尼,感谢您的回复!这显示了一些其他错误:TypeError: Cannot read properties of undefined (reading 'map') 只需添加一个 ?经过描述,所以props?.description?.map((item) =&gt; (&lt;li&gt;item&lt;/li&gt;)) 我认为如果要计算该值,这将是问题所在。但它是硬编码的。

以上是关于为啥通过 props 正确传递的数组返回 undefined?的主要内容,如果未能解决你的问题,请参考以下文章

Vue.js - 如何将 prop 作为 json 数组传递并在子组件中正确使用?

为啥指针不能传递正确的值(C)?

如果我们可以简单地在 props 中传递创建的 ref,为啥还需要 React forwardRef? [复制]

通过 Vue.js 中的 slot-scope 将 props 传递给所有子项的正确方法

为啥数组中的两个对象中只有一个作为道具传递?

通过data-dojo-props属性传递数组