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

React Modal组件props异常触发页面空白及对象属性访问问题求助

问题原因及修复方案

核心问题1:点击按钮页面空白

你在ServiceModal组件中直接将serviceInfo对象作为React子元素渲染,React不支持直接渲染普通对象,会抛出「Objects are not valid as a React child」错误,直接导致应用崩溃白屏。

核心问题2:无法正确访问title和desc属性

你没有从传入的serviceInfo对象中读取对应属性,而是直接渲染了整个对象,同时需要做好空值防护避免属性读取报错。

修复后的代码

修改后的ServiceModal组件

const ServiceModal = (props) => {
  return ReactDOM.createPortal(
    <>
      {/* 增加serviceInfo存在性判断,避免空值报错 */}
      {props.show && props.serviceInfo ? (
        <div className={classes.modalContainer} onClick={() => props.close()}>
          <div className={classes.modal} onClick={(e) => e.stopPropagation()}>
            <header className={classes['modal_header']}>
              {/* 读取对象的title属性 */}
              <h2> {props.serviceInfo.title} </h2>
              <hr />
            </header>
            <div className={classes['modal_content']}>
              {/* 读取对象的desc属性 */}
              <main> {props.serviceInfo.desc} </main>
            </div>
            <footer className={classes.Footer}>
              <button
                className={classes['modal-close']}
                onClick={() => props.close()}
              >
                Cancel
              </button>
            </footer>
          </div>
        </div>
      ) : null}
    </>,
    document.getElementById('modal')
  );
};

可选简化写法

如果不想加双重判断,也可以用可选链运算符简化属性读取,写法如下:

<h2> {props.serviceInfo?.title} </h2>
<main> {props.serviceInfo?.desc} </main>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:39:01