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

React中从PureComponent调用Component模态框显示异常求助

问题分析与解决方案

别担心,你遇到的问题和混合使用PureComponent/Component、TSX/JS文件完全没关系——这两种组合在React里都是完全支持的!你的问题其实是两个小细节导致的:

1. 拼写错误导致模态框无法关闭

你在TSX里渲染<AddModal>的时候,把onHide写成了onHIde(注意字母I是大写的):

// 错误写法
<AddModal show={this.state.addModalShow} onHIde={this.addModalClose} />

而你的AddModal组件里,关闭按钮绑定的是this.props.onHide:

<Button onClick={this.props.onHide}>Close</Button>

因为属性名不匹配,点击关闭按钮根本不会触发addModalClose方法,所以模态框会一直显示在页面上,看起来就是“直接覆盖在原组件上方”关不掉。把拼写改过来就行:

// 正确写法
<AddModal show={this.state.addModalShow} onHide={this.addModalClose} />

2. 确保组件render方法的结构正确

从你贴的TSX片段看,渲染部分没有包裹在render()方法里,也没有用单个根元素(比如<div>或者<React.Fragment>)包裹多个子元素。React要求组件的render方法必须返回单个元素(或者用Fragment包裹多个元素),所以你的App组件render部分应该写成这样:

render() {
  return (
    <div className="app-content">
      <Button id="button" className="add_ticket" onClick={this.addModalOpen}>New Ticket</Button>
      <AddModal show={this.state.addModalShow} onHide={this.addModalClose} />
    </div>
  );
}

如果没有这个根元素,React会抛出错误,可能影响组件的正常渲染。


解决这两个问题之后,模态框应该就能正常打开和关闭了。至于你担心的PureComponent和Component混用、TSX与JS组件互导的问题,完全不用在意——React对这些场景的支持非常好,不会引发这类显示/交互问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:21:18