【问题标题】:'Cannot read property 'map' of undefined' even though I explicitly told it not to run the function if array is undefined'无法读取未定义的属性'map'',即使我明确告诉它如果数组未定义则不要运行该函数
【发布时间】:2021-04-18 19:41:16
【问题描述】:

我正在使用 React 来显示一组图像。正在从数据库中检索图像 URL,因此我希望它们不会立即出现,一旦加载它们就会作为道具传递给该组件。

为了防止这导致错误,如果数组未定义,我使用了两个短路运算符来防止映射运行,但函数仍在运行并返回无法读取未定义的属性“映射”。任何想法为什么?有时当我刷新页面时它会起作用。

{
    images !== undefined && images.length > 1 &&
        <React.Fragment>
            <ImageCarouselBtnForward icon={ faChevronRight } onPointerDown={() => incrementer(images, activeImage, '+')}/>
            <ImageCarouselBtnBack icon={faChevronLeft} onPointerDown={() => incrementer(images, activeImage, '-')}/>
            <ImageCarouselSlideIndicatorGroup>
                    {
                        images !== undefined &&
                        images.map((e, idx) => (
                            <ImageCarouselSlideIndicator 
                                idx={idx} 
                                activeImage={activeImage} 
                                arrLength={images.length} 
                                onPointerDown={() => incrementer(images, activeImage, null, idx)}
                            />
                        ))
                    }
           </ImageCarouselSlideIndicatorGroup>
       </React.Fragment>
}

非常感谢任何帮助。

【问题讨论】:

  • 这表明您在其他地方遇到了此错误,而不是在显示的代码中。 (不太可能:undefined 已被屏蔽。)另外,与其明确测试undefined,我可能只使用真实测试:images &amp;&amp; images.length &gt; 1 &amp;&amp; ...(你不需要另一个)。
  • 你试过用普通的if condition吗?
  • 我想知道images?.map 是否可行。可能会使用 != undefined 。除非你用 [] 初始化你的数组,在这种情况下它还需要一个长度测试

标签: javascript reactjs styled-components


【解决方案1】:

试试图片!= undefined。

或者用 [] 初始化图像。而且您不必进行未定义的检查。你只需要 images.length 检查。

【讨论】:

    【解决方案2】:

    作为一种解决方法,我将短路部分移至父元素,以防止整个组件呈现,直到图像数组可用。

    为了解决最初的问题,我将图像初始化为一个空数组。

    【讨论】:

    • 这很好,也很有意义,但如果images 是一个数组或undefined,问题中的代码就可以工作。
    • @T.J.Crowder 抱歉,如果我说的很密集,但你能进一步解释一下吗?感谢您的帮助。
    • 我是说你在问题中设置的警卫会起作用。如果您仍然收到错误,它来自其他代码,或者在添加它们之前的代码的旧副本等。将条件添加到父级是有意义的,但它不能解决问题提出的问题,因为问题中的代码不会出现问题所问的问题。
    • @T.J.Crowder 啊,我明白你的意思了,我认为你是对的。按照其他人的建议将图像初始化为空数组似乎可以解决问题。
    猜你喜欢
    • 1970-01-01
    • 2012-11-22
    • 2021-03-11
    • 2020-05-31
    • 2022-07-11
    • 2022-07-27
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    相关资源
    最近更新 更多