文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

React Hook实现对话框组件

2024-04-02 19:55

关注

React Hook实现对话框组件,供大家参考,具体内容如下

准备

      进阶:为对话框组件背景添加蒙皮,当对话框内容需要滚动时限制浏览器页面的滚动。

附上 Dialog 和 DialogMain组件代码,其中DialogMain 为父组件,使用时只需将其挂载至 App.js。

代码

DialogMain 父组件代码

import React from "react";
import Dialog from "./dialog";
//初始化 Context
export const StatusContext = React.createContext();
const DialogTest = () => {
    //设置状态控制对话框的打开与关闭
    const [status, setStatus] = React.useState(false);
    //条件渲染,符合条件返回 Dialog 组件否则返回 null
    function GetDialog() {
        if (status) return <Dialog />;
        else return null;
    }
    //打开函数
    function openDialog() {
        //打开时禁止浏览器外面的滚动,注释掉这行鼠标在对话框外面时可以滚动浏览器界面
        document.body.style.overflow = "hidden";
        setStatus(true);
    }
    return (
        <div>
            {}
            <button onClick={openDialog}>打开对话框</button>
            {}
            <StatusContext.Provider value={{ setStatus }}>
                <GetDialog />
            </StatusContext.Provider>
        </div>
    );
};

export default DialogTest;

Dialog子组件代码

import React from "react";
import { StatusContext } from "./dialogMain";

const Dialog = (props) => {
    //利用解构赋值将 setState 从 useContext分离出来
    const { setStatus } = React.useContext(StatusContext);
    //关闭时更改 Status 状态为 false
    function uninstallDialog() {
        setStatus(false);
        //关闭时重新将浏览器界面设置为滚动或其他
        document.body.style.overflow = "scroll";
    }
    // 点击蒙层本身时关闭对话框,点击对话框的内容时不关闭
    function handleClick(event) {
        if (event.target === event.currentTarget) {
            //调用关闭的方法
            uninstallDialog();
        }
    }
    return (
        // 为整个组件添加css 样式并让其置于顶层,同时对话框意外的地方添加模糊效果
        <div
            style={{
                position: " fixed",
                top: 0,
                left: 0,
                right: 0,
                bottom: 0,
                background: "rgba(0, 0, 0, 0.3)",
                zIndex: " 99",
            }}
            onClick={handleClick}
        >
            {}
            <div
                style={{
                    position: "absolute",
                    left: "50%",
                    top: "50%",
                    overflow: "auto",
                    transform: "translate(-50%, -50%)",
                    padding: "30px 30px",
                    width: " 200px",
                    height: " 200px",
                    border: "2px solid yellow",
                    borderRadius: "8px",
                    background: "yellow",
                }}
            >
                {}
                <button onClick={uninstallDialog}>关闭</button>
                对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框
                对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框对话框
                对话框 对话框 对话框 对话框 对话框 对话框 对话框 对话框 对话框
            </div>
        </div>
    );
};
export default Dialog;

App.js代码

import "./App.css";
import DialogMain from "./component/dialogTest/dialogMain";
function App() {
    return (
        <div className="App">
            <div style={{ height: "2000px" }}>
                <DialogMain />
            </div>
        </div>
    );
}

export default App;

运行界面

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯