最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React?Hook實(shí)現(xiàn)對(duì)話(huà)框組件

 更新時(shí)間:2022年08月23日 14:59:16   作者:weixin_45703889  
這篇文章主要為大家詳細(xì)介紹了React?Hook實(shí)現(xiàn)對(duì)話(huà)框組件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

React Hook實(shí)現(xiàn)對(duì)話(huà)框組件,供大家參考,具體內(nèi)容如下

準(zhǔn)備

  • 思路:對(duì)話(huà)框組件是有需要的時(shí)候希望它能夠彈出來(lái),不需要的時(shí)候在頁(yè)面上是沒(méi)有任何顯示的,這就意味著需要一個(gè)狀態(tài),在父組件點(diǎn)擊按鈕或其他的時(shí)候能夠更改+ 它并顯示,同時(shí)子組件(對(duì)話(huà)框組件)點(diǎn)擊關(guān)閉的時(shí)候也需要更改這個(gè)狀態(tài)。

      進(jìn)階:為對(duì)話(huà)框組件背景添加蒙皮,當(dāng)對(duì)話(huà)框內(nèi)容需要滾動(dòng)時(shí)限制瀏覽器頁(yè)面的滾動(dòng)。

  • React Hook 主要用到了 useState,useContext,useContext 主要用于將父組件的 setStatus 傳遞給子組件以至于它可以更新?tīng)顟B(tài)。

附上 Dialog 和 DialogMain組件代碼,其中DialogMain 為父組件,使用時(shí)只需將其掛載至 App.js。

代碼

DialogMain 父組件代碼

import React from "react";
import Dialog from "./dialog";
//初始化 Context
export const StatusContext = React.createContext();
const DialogTest = () => {
? ? //設(shè)置狀態(tài)控制對(duì)話(huà)框的打開(kāi)與關(guān)閉
? ? const [status, setStatus] = React.useState(false);
? ? //條件渲染,符合條件返回 Dialog 組件否則返回 null
? ? function GetDialog() {
? ? ? ? if (status) return <Dialog />;
? ? ? ? else return null;
? ? }
? ? //打開(kāi)函數(shù)
? ? function openDialog() {
? ? ? ? //打開(kāi)時(shí)禁止瀏覽器外面的滾動(dòng),注釋掉這行鼠標(biāo)在對(duì)話(huà)框外面時(shí)可以滾動(dòng)瀏覽器界面
? ? ? ? document.body.style.overflow = "hidden";
? ? ? ? setStatus(true);
? ? }
? ? return (
? ? ? ? <div>
? ? ? ? ? ? {/* 按鈕綁定打開(kāi)函數(shù) */}
? ? ? ? ? ? <button onClick={openDialog}>打開(kāi)對(duì)話(huà)框</button>
? ? ? ? ? ? {/* 使用 Context 的 Provider 暴露 setStatus 方法 */}
? ? ? ? ? ? <StatusContext.Provider value={{ setStatus }}>
? ? ? ? ? ? ? ? <GetDialog />
? ? ? ? ? ? </StatusContext.Provider>
? ? ? ? </div>
? ? );
};

export default DialogTest;

Dialog子組件代碼

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

const Dialog = (props) => {
? ? //利用解構(gòu)賦值將 setState 從 useContext分離出來(lái)
? ? const { setStatus } = React.useContext(StatusContext);
? ? //關(guān)閉時(shí)更改 Status 狀態(tài)為 false
? ? function uninstallDialog() {
? ? ? ? setStatus(false);
? ? ? ? //關(guān)閉時(shí)重新將瀏覽器界面設(shè)置為滾動(dòng)或其他
? ? ? ? document.body.style.overflow = "scroll";
? ? }
? ? // 點(diǎn)擊蒙層本身時(shí)關(guān)閉對(duì)話(huà)框,點(diǎn)擊對(duì)話(huà)框的內(nèi)容時(shí)不關(guān)閉
? ? function handleClick(event) {
? ? ? ? if (event.target === event.currentTarget) {
? ? ? ? ? ? //調(diào)用關(guān)閉的方法
? ? ? ? ? ? uninstallDialog();
? ? ? ? }
? ? }
? ? return (
? ? ? ? // 為整個(gè)組件添加css 樣式并讓其置于頂層,同時(shí)對(duì)話(huà)框意外的地方添加模糊效果
? ? ? ? <div
? ? ? ? ? ? style={{
? ? ? ? ? ? ? ? position: " fixed",
? ? ? ? ? ? ? ? top: 0,
? ? ? ? ? ? ? ? left: 0,
? ? ? ? ? ? ? ? right: 0,
? ? ? ? ? ? ? ? bottom: 0,
? ? ? ? ? ? ? ? background: "rgba(0, 0, 0, 0.3)",
? ? ? ? ? ? ? ? zIndex: " 99",
? ? ? ? ? ? }}
? ? ? ? ? ? onClick={handleClick}
? ? ? ? >
? ? ? ? ? ? {/* 為對(duì)話(huà)框添加 css 樣式,absolute定位時(shí)相對(duì)于容器的位置 ,同時(shí)將 overflow 設(shè)置為自動(dòng)*/}
? ? ? ? ? ? <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",
? ? ? ? ? ? ? ? }}
? ? ? ? ? ? >
? ? ? ? ? ? ? ? {/* 為關(guān)閉按鈕綁定關(guān)閉方法 */}
? ? ? ? ? ? ? ? <button onClick={uninstallDialog}>關(guān)閉</button>
? ? ? ? ? ? ? ? 對(duì)話(huà)框?qū)υ?huà)框?qū)υ?huà)框?qū)υ?huà)框?qū)υ?huà)框?qū)υ?huà)框?qū)υ?huà)框?qū)υ?huà)框?qū)υ?huà)框?qū)υ?huà)框?qū)υ?huà)框?qū)υ?huà)框?qū)υ?huà)框?qū)υ?huà)框?qū)υ?huà)框?qū)υ?huà)框?qū)υ?huà)框?qū)υ?huà)框?qū)υ?huà)框?qū)υ?huà)框?qū)υ?huà)框?qū)υ?huà)框?qū)υ?huà)框
? ? ? ? ? ? ? ? 對(duì)話(huà)框?qū)υ?huà)框?qū)υ?huà)框?qū)υ?huà)框?qū)υ?huà)框?qū)υ?huà)框?qū)υ?huà)框?qū)υ?huà)框?qū)υ?huà)框?qū)υ?huà)框?qū)υ?huà)框?qū)υ?huà)框?qū)υ?huà)框
? ? ? ? ? ? ? ? 對(duì)話(huà)框 對(duì)話(huà)框 對(duì)話(huà)框 對(duì)話(huà)框 對(duì)話(huà)框 對(duì)話(huà)框 對(duì)話(huà)框 對(duì)話(huà)框 對(duì)話(huà)框
? ? ? ? ? ? </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;

運(yùn)行界面

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • React使用context進(jìn)行跨級(jí)組件數(shù)據(jù)傳遞

    React使用context進(jìn)行跨級(jí)組件數(shù)據(jù)傳遞

    這篇文章給大家介紹了React使用context進(jìn)行跨級(jí)組件數(shù)據(jù)傳遞的方法步驟,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)React context組件數(shù)據(jù)傳遞有一定的幫助,感興趣的小伙伴跟著小編一起來(lái)學(xué)習(xí)吧
    2024-01-01
  • 詳解React Fiber的工作原理

    詳解React Fiber的工作原理

    這篇文章主要介紹了React Fiber的工作原理的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用React框架,感興趣的朋友可以了解下
    2021-04-04
  • 在React中使用Antd上傳并讀取Excel文件的詳細(xì)步驟

    在React中使用Antd上傳并讀取Excel文件的詳細(xì)步驟

    在React中使用Antd組件庫(kù)來(lái)上傳并讀取Excel文件,可以結(jié)合antd的Upload組件和xlsx庫(kù)來(lái)實(shí)現(xiàn),以下是一個(gè)詳細(xì)的步驟和示例代碼,展示如何在React應(yīng)用中實(shí)現(xiàn)這一功能,感興趣的小伙伴跟著小編一起來(lái)看看吧
    2025-01-01
  • 模塊化react-router配置方法詳解

    模塊化react-router配置方法詳解

    這篇文章主要介紹了模塊化react-router配置方法詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • react基于react-slick實(shí)現(xiàn)多圖輪播效果

    react基于react-slick實(shí)現(xiàn)多圖輪播效果

    React slick是一個(gè)使用React構(gòu)建的輪播組件,下面這篇文章主要給大家介紹了關(guān)于react基于react-slick實(shí)現(xiàn)多圖輪播效果的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • react實(shí)現(xiàn)鼠標(biāo)懸停在SVG地圖上某個(gè)區(qū)域時(shí)上方呈現(xiàn)柱形圖效果

    react實(shí)現(xiàn)鼠標(biāo)懸停在SVG地圖上某個(gè)區(qū)域時(shí)上方呈現(xiàn)柱形圖效果

    這篇文章主要介紹了react實(shí)現(xiàn)鼠標(biāo)懸停在SVG地圖上某個(gè)區(qū)域時(shí),其上方呈現(xiàn)柱形圖,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • React實(shí)現(xiàn)組件間通信的幾種方式小結(jié)

    React實(shí)現(xiàn)組件間通信的幾種方式小結(jié)

    在React應(yīng)用中,組件間的通信是一個(gè)基礎(chǔ)而關(guān)鍵的概念,理解和掌握不同組件之間的通信方式,可以幫助我們構(gòu)建出更加模塊化、可維護(hù)和可擴(kuò)展的應(yīng)用程序,React提供了多種組件通信的方法,本文給大家詳細(xì)的介紹了這些方法,需要的朋友可以參考下
    2024-07-07
  • React創(chuàng)建組件的三種方式及其區(qū)別

    React創(chuàng)建組件的三種方式及其區(qū)別

    本文主要介紹了React創(chuàng)建組件的三種方式及其區(qū)別,具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-01-01
  • React路由鑒權(quán)的實(shí)現(xiàn)方法

    React路由鑒權(quán)的實(shí)現(xiàn)方法

    這篇文章主要介紹了React路由鑒權(quán)的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • React Store及store持久化的使用教程

    React Store及store持久化的使用教程

    這篇文章主要介紹了React Store及store持久化的使用教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01

最新評(píng)論

巴东县| 化隆| 长宁县| 南投市| 镇远县| 安泽县| 育儿| 延津县| 瓮安县| 河北区| 罗源县| 武鸣县| 察隅县| 安康市| 房产| 杭州市| 西乌珠穆沁旗| 南投县| 托克托县| 霍城县| 清苑县| 崇礼县| 兴海县| 兰州市| 新乡县| 徐水县| 长顺县| 穆棱市| 阳曲县| 青川县| 伊春市| 西安市| 荥经县| 长兴县| 博野县| 双柏县| 临清市| 马鞍山市| 凌海市| 化州市| 巴彦淖尔市|