You need to enable JavaScript to run this app. React类组件使用class切换两个div显隐的加载与点击异常问题求解
优惠活动
大模型
产品
解决方案
定价
更多

React类组件使用class切换两个div显隐的加载与点击异常问题求解

问题原因

  • render代码中两个div未书写闭合标签,导致DOM结构解析异常,样式规则无法正确匹配生效,是初始加载时两个div同时显示的核心原因
  • 在React组件的JSX中同时使用了className和原生class属性,属性冲突会导致最终生成的DOM节点类名不符合预期
  • flipScreen方法中连续调用两次setState,虽然React会批量处理,但更推荐合并为单次调用减少不必要的渲染
  • 需确认全局CSS中.hidden类是否正确定义了display: none !important;样式,避免优先级低于其他类导致隐藏不生效

修复方案

1. 合并state更新逻辑

flipScreen(){
  this.setState({
    hideDashBoard: true,
    hideContractScreen: false
  });
}

如果需要实现点击反复切换两个div显隐,可以把逻辑改成:

flipScreen(){
  this.setState(prevState => ({
    hideDashBoard: !prevState.hideDashBoard,
    hideContractScreen: !prevState.hideContractScreen
  }));
}

2. 修正JSX结构

移除多余的原生class属性,补全div闭合标签,使用模板字符串拼接类名:

{/* 合约面板:hideContractScreen为true时隐藏 */}
<div 
  className={`${this.state.hideContractScreen ? 'hidden' : ''} row`} 
  style={{position:"absolute",left:"250px",top:"50px"}}
>
  {/* 合约面板业务内容 */}
</div>

{/* 仪表盘面板:hideDashBoard为true时隐藏 */}
<div 
  className={`${this.state.hideDashBoard ? 'hidden' : 'show'} row`} 
  style={{position:"absolute",left:"250px",top:"50px"}}
>  
  <span onClick={this.flipScreen} className="startProposal">
    Start Proposal
  </span>
  {/* 仪表盘面板业务内容 */}
</div>

3. 确认全局CSS规则

.hidden {
  display: none !important;
}
.show {
  display: block;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 18:36:05