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

使用.toUpperCase处理React组件props时页面无法渲染的问题

React中调用toUpperCase()报TypeError的解决方案

问题描述

开发书籍列表React应用时,尝试将作者名转为大写后页面无法渲染,控制台报错:

Uncaught TypeError: Cannot read properties of undefined (reading 'toUpperCase')

前两个书籍组件的props.author.toUpperCase()能正常输出,但整体页面崩溃。

问题原因

代码中BookList组件渲染了三个Book实例,前两个都传递了完整的img、title、author属性,但第三个<Book />未传入任何props。当Book组件尝试访问props.author.toUpperCase()时,第三个实例的props.author为undefined,无法调用toUpperCase()方法,导致页面报错。

解决方案

方案1:移除无属性的Book组件

直接删除未传参的<Book />,确保所有Book组件都有完整属性传入:

function BookList() {
  return (
    <section className="booklist">
      <Book
        img={firstBook.img}
        title={firstBook.title}
        author={firstBook.author}
      />
      <Book
        img={secondBook.img}
        title={secondBook.title}
        author={secondBook.author}
      />
      {/* 删除无props的<Book /> */}
    </section>
  );
}

方案2:设置组件默认props

如果需要保留空的Book组件,给Book组件添加默认属性,避免undefined引发的报错:

const Book = (props) => {
  return (
    <article className="book">
      <img src={props.img} alt="bookcover" className="bookcover" />
      <h1>{props.title}</h1>
      <h4>{(props.author || '未知作者').toUpperCase()}</h4>
    </article>
  );
};

// 规范设置默认props的方式
Book.defaultProps = {
  img: '',
  title: '未命名书籍',
  author: '未知作者'
};

方案3:使用可选链操作符

利用ES2020的可选链操作符?.,当属性不存在时返回undefined,避免报错:

const Book = (props) => {
  return (
    <article className="book">
      <img src={props.img} alt="bookcover" className="bookcover" />
      <h1>{props.title}</h1>
      <h4>{props.author?.toUpperCase()}</h4>
    </article>
  );
};

这种方式下,第三个Book组件的作者名会显示为空,不会导致页面崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:24:47