Javascript ';无法读取属性';地图';未定义的';即使我明确告诉它,如果数组未定义,就不要运行该函数

Javascript ';无法读取属性';地图';未定义的';即使我明确告诉它,如果数组未定义,就不要运行该函数,javascript,reactjs,styled-components,Javascript,Reactjs,Styled Components,我使用React来显示一组图像。图像URL是从数据库中检索的,所以我希望它们不会立即出现,一旦加载,它们就会作为道具传递给这个组件 为了防止这导致错误,我使用了两个短路运算符来防止映射在数组未定义的情况下运行,但函数仍在运行,并且返回无法读取未定义的属性“map”。你知道为什么吗?有时,当我刷新页面时,它会工作 { images !== undefined && images.length > 1 && <React.Fragm

我使用React来显示一组图像。图像URL是从数据库中检索的,所以我希望它们不会立即出现,一旦加载,它们就会作为道具传递给这个组件

为了防止这导致错误,我使用了两个短路运算符来防止映射在数组未定义的情况下运行,但函数仍在运行,并且返回无法读取未定义的属性“map”。你知道为什么吗?有时,当我刷新页面时,它会工作

{
    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>
}
{
图像!==未定义和图像长度>1&&
递增器(图像,活动图像,“+”)}/>
递增器(图像,活动图像,'-')}/>
{
图像!==未定义&&
images.map((e,idx)=>(
递增器(images,activeImage,null,idx)}
/>
))
}
}

非常感谢您的帮助。

作为一种解决方法,我将短路向上移动到父元素,以防止整个组件渲染,直到图像阵列可用为止


要修复原始问题,我将图像初始化为空数组。

尝试图像!=未定义


或使用[]初始化图像。你不必把未定义的支票放进去。您只需要images.length检查。

这表明您在其他地方遇到了此错误,而不是在显示的代码中。(可能性要小得多:
未定义的
被隐藏了。)另外,我不需要显式地测试
未定义的
,我可能只需要使用一个真实的测试:
images&&images.length>1&……
(并且您不需要另一个).你试过使用常规的
如果条件
?我想知道
图像吗?.map
会起作用。可能会使用!=但是没有定义。除非你用[]初始化你的数组,在这种情况下,它还需要一个长度测试,这很好而且很有意义,但是如果
images
是一个数组或者
未定义的
@T.J.Crowder,那么问题中的代码可以工作,如果我很密集,你能进一步解释吗?谢谢你的帮助。我是说你在问题中的守卫会起作用的。如果您仍然收到错误,它来自其他代码,或者在添加它们之前的旧代码副本,等等。将条件添加到父项是有意义的,但它不能解决问题所涉及的问题,因为问题所问的问题与问题中的代码无关。@t.J.Crowder啊,我明白你的意思,我认为你是对的。按照其他人的建议将图像初始化为空数组似乎可以解决这个问题。