You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React JSX中使用nullish operator??渲染元素不生效的原因

问题原因

核心是空值合并运算符(??)的语义和你要实现的条件渲染逻辑完全不匹配,属于运算符场景用错:

  • ??的运算规则非常明确:只有当左侧操作数严格等于null或者undefined时,才会返回右侧的结果;其余所有情况,不管左侧是true、false、0、空字符串这类值,都会直接返回左侧本身。
  • 你写的左侧表达式someArray.length > 0的返回值永远是布尔类型:要么是true(数组有元素),要么是false(数组为空),这两个值都不属于null/undefined,所以不管数组有没有内容,??永远不会执行到右侧返回<div>Test</div>,只会把左侧的布尔值返回给JSX渲染层。
  • 而React在渲染时会自动忽略布尔类型、null、undefined类型的值,不会在页面上生成任何DOM节点,所以你无论怎么调整数组长度,都看不到预期的Test内容。
补充说明

你大概率是把??和常用于条件渲染的&&运算符记混了,二者逻辑完全不同:

  • 短路与&&的规则是:左侧为truthy值时返回右侧操作数,左侧为falsy值时返回左侧本身,这才符合"满足条件才渲染右侧元素"的需求,对应最简正确写法是{someArray.length > 0 && <div>Test</div>}
  • 你写的三元运算符能生效,是因为三元本身就是严格按条件分支返回值:条件为真返回第一个分支的JSX,为假返回空片段,完全匹配条件渲染的逻辑。

额外注意:??的设计场景是为空值设置默认值,比如const username = inputName ?? '游客',只有当inputName是null/undefined时才会回退到默认值,inputName为空字符串、0这类合法falsy值时会正常保留,天生就不是用来做分支判断的。


内容的提问来源于stack exchange,提问作者RoyimTas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 15:00:56