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

点击X无法关闭React+Typescript实现的弹窗横幅问题求助

弹窗无法关闭问题修复方案

问题根因汇总

  • Banner组件内的关闭按钮未绑定点击事件,你定义的关闭逻辑仅作为文本渲染到页面,点击不会触发执行
  • App组件传递给Banner的close回调未实现关闭逻辑,直接抛出异常,就算触发事件也无法修改弹窗显隐状态
  • 存在多处语法疏漏:Properties类型定义缺少闭合括号、App组件未导入useState、状态更新函数大小写拼写错误、JSX结构缺少闭合标签
  • CSS样式不符合使用规范:普通元素设置content属性无效,未设置可点击光标提示

逐文件修复代码

import React, {useCallback} from "react";
type Properties = {
  close: () => void;
  text: string;
}
const Banner: React.FC<Properties> = ({close, text}) => {
  const onClick = useCallback(() => {
    close();
  }, [close]);
  return (
    <div className = "BannerBox">
      <div className = "banner">
        <span className = "popup" onClick={onClick}>[x]</span>
        {text}
      </div>
    </div>
  );
};
export default Banner;

App.tsx

import React, {useState} from "react";
import Banner from "./Components/Banner";
function App(): JSX.Element {
  const [isOpen, setIsOpen]=useState(false);
  const toggleBanner = () => {
    setIsOpen(!isOpen);
  };

  return (
    <div>
      <input type = "button"
        value = "popup"
        onClick={toggleBanner}/>
      <p>hi</p>
      {isOpen && <Banner text = {"hello"} close={() => setIsOpen(false)}/>}
    </div>
  )
}
export default App;
.BannerBox{
  position: fixed;
  background: blue;
  width:50%;
}
 
.banner{
  position: relative;
  width: 100%;
}

.popup{
  cursor: pointer;
  background: green;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:36:04