在React+NextJS中,为何map()可渲染功能而forEach()不行?
问题解答:React中forEach无法渲染列表,map却可以的原因
核心原因很直白:React在JSX中需要接收可渲染的内容集合,而forEach和map的返回值完全不同。
具体分析
map()遍历数组时,会把回调里返回的每个<ListItem>元素收集成新数组返回。React拿到这个数组后,会逐个渲染数组内的React元素,所以列表能正常显示。forEach()只是遍历数组执行回调逻辑,没有任何返回值(最终返回undefined)。当你在JSX里写userSubIds?.forEach(...)时,相当于给React传递了undefined,而React遇到undefined会直接跳过渲染,所以看不到列表项,也不会报错(undefined属于React允许的“无内容”合法情况)。
补充:你的正常版本代码有个小疏漏
你提供的正常渲染版本里,map的回调用了大括号但没写return,实际运行也不会渲染,需要改成下面两种写法之一,同时别忘了加React列表要求的唯一key:
写法1:隐式返回(用括号包裹JSX)
userSubIds?.map(subId => ( <ListItem key={subId.id}> {subId.data} </ListItem> ))
写法2:显式return
userSubIds?.map(subId => { return <ListItem key={subId.id}> {subId.data} </ListItem> })
内容的提问来源于stack exchange,提问作者engineer-x
相关产品推荐
相关产品推荐

