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

ReactJS中map函数内null值处理:||运算符失效求助

解决React中访问null对象属性的报错问题

这个问题我之前也踩过坑!你当前的||写法之所以没用,是因为错误发生在||生效之前——当i.categoria为null时,你先尝试访问i.categoria.id,这一步直接触发了TypeError,||根本没机会执行判断。另外还要提醒你:模板字符串里的i.categoria.id/${i.id}写法有问题,这里的/会被当成除法运算符,不是路径分隔符,得把它移到模板字符串的变量外面!

下面给你几个靠谱的解决方案:

1. 用可选链运算符(最推荐)

ES2020引入的可选链?.可以完美解决这个问题,它会在访问属性前先判断对象是否存在,不存在就返回undefined,不会抛出错误。结合||给默认值,代码会非常简洁:

return (
  <div>
    {listShow.map(i => (
      <Link 
        to={`/noticias/detalle/${i.categoria?.id || 'WithoutCat'}/${i.id}`} 
        key={i.id}
      >
        <h3>{i.titulo}</h3>
        <img 
          alt={i.titulo} 
          src={`${process.env.REACT_APP_IMG_BASE}${i.imagen_intro}`} 
          width={500} 
        />
      </Link>
    ))}
  </div>
);

2. 三元运算符做前置判断

如果你的项目还没配置支持可选链(现在大部分React项目都支持了),可以用三元运算符先判断i.categoria是否存在:

return (
  <div>
    {listShow.map(i => (
      <Link 
        to={`/noticias/detalle/${i.categoria ? i.categoria.id : 'WithoutCat'}/${i.id}`} 
        key={i.id}
      >
        <h3>{i.titulo}</h3>
        <img 
          alt={i.titulo} 
          src={`${process.env.REACT_APP_IMG_BASE}${i.imagen_intro}`} 
          width={500} 
        />
      </Link>
    ))}
  </div>
);

3. 提前解构并设置默认值

你也可以在map内部先解构数据,给categoria设置默认对象,这样后续访问属性就不会出错了:

return (
  <div>
    {listShow.map(i => {
      // 解构时给categoria设置默认值
      const { 
        categoria = { id: 'WithoutCat' }, 
        id, 
        titulo, 
        imagen_intro 
      } = i;
      return (
        <Link 
          to={`/noticias/detalle/${categoria.id}/${id}`} 
          key={id}
        >
          <h3>{titulo}</h3>
          <img 
            alt={titulo} 
            src={`${process.env.REACT_APP_IMG_BASE}${imagen_intro}`} 
            width={500} 
          />
        </Link>
      )
    })}
  </div>
);

另外补充一下:src={process.env.REACT_APP_IMG_BASE + i.imagen_intro}改成模板字符串写法会更清晰,避免字符串拼接时的空格或路径问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:44:49