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