Portal

文章目录

  • 定义
  • 用法
  • 事件冒泡

定义

Portals 提供了一个最好的在父组件包含的DOM结构层级外的DOM节点渲染组件的方法。

ReactDOM.createPortal(child,container);

第一个参数child是可渲染的react子项,比如元素,字符串或者片段等。第二个参数container是一个DOM元素。

用法

普通的组件,子组件的元素将挂载到父组件的DOM节点中。

render() {// React 挂载一个div节点,并将子元素渲染在节点中
return (<div>{this.props.children}</div>);}

有时需要将元素渲染到DOM中的不同位置上去,这是就用到的portal的方法。

render(){// 此时React不再创建div节点,而是将子元素渲染到Dom节点上。domNode,是一个有效的任意位置的dom节点。
return ReactDOM.createPortal(this.props.children,domNode)}

一个典型的用法就是当父组件的dom元素有 overflow:hidden 或者z-inde 样式,而你又需要显示的子元素超出父元素的盒子。举例来说,如对话框,悬浮框,和小提示。

事件冒泡

虽然通过portal渲染的元素在父组件的盒子之外,但是渲染的dom节点仍在React的元素树上,在那个dom元素上
的点击事件仍然能在dom树中监听到。

import React, { Component } from 'react';import ReactDOM from 'react-dom';const getDiv = () => {const div = document.createElement('div');document.body.appendChild(div);return div;};const withPortal = (WrappedComponent) => {class AddPortal extends Component {constructor(props) {super(props);this.el = getDiv();}componentWillUnmount() {document.body.removeChild(this.el);}render(props) {return ReactDOM.createPortal(<WrappedComponent {...props} />, this.el);}}return AddPortal;};class Modal extends Component {render() {return (<div><div>amodal content</div><button type="button">Click</button></div>);}}const PortalModal = withPortal(Modal);class Page extends Component {constructor(props) {super(props);this.state = { clicks: 0 };this.handleClick = this.handleClick.bind(this);}handleClick() {this.setState(state => ({clicks: state.clicks + 1}));}render() {return (<div onClick={this.handleClick}><h3>ppppppppp</h3><h3>num: {this.state.clicks}</h3><PortalModal /></div>);}}export default Page;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/750950.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab simulink 工业现场漆包机烘炉模糊PID控制算法

1、内容简介 略 70-可以交流、咨询、答疑 2、内容说明 matlab simulink 工业现场漆包机烘炉模糊PID控制算法 第五章 控制算法仿真与分析 在第二章系统分析结合工业现场漆包机烘炉数学模型详细分析模糊PID控制算法以及解耦控制算法的优缺点、实现原理&#xff0c;为本章算法…

第8节课------列生成与分支定价法

列生成与分支定价法 1. 列生成 通过迭代的方式来构建和解决一个“受限”的主问题,并通过解决一系列相关的子问题来动态地生成新的变量(或称列),这些新变量有可能改进主问题的解。 原问题新添加的这一列可以通过对偶问题的行来计算。 2. 列生成的详细说明 对于原来的…

【TB作品】数字电压表设计,MSP430,电压表,Proteus仿真,分档位

文章目录 题目要求第1版方案第2版方案代码介绍获取代码和仿真 题目要求 33、数字电压表设计 基本要求: 了解电压表的工作原理。 对0~2.5V的模拟电压进行循环采集 采集的数据进行A/D转换后用LCD屏显示测量值,显示精度0.0001 用键盘选择测量范围(分档) 超过测量范围时指示灯持续…

20240316-回溯算法

分类 组合问题&#xff1a;N个数里面按一定规则找出k个数的集合 切割问题&#xff1a;一个字符串按一定规则有几种切割方式 子集问题&#xff1a;一个N个数的集合里有多少符合条件的子集 排列问题&#xff1a;N个数按一定规则全排列&#xff0c;有几种排列方式 棋盘问题&#…

基于springboot+vue实现员工信息管理系统项目【项目源码+论文说明】

基于springbootvue实现员工信息管理系统演示 引言 随着计算机技术的飞速发展&#xff0c;计算机在企业管理中应用的普及&#xff0c;利用计算机在实现企业人事档案的管理势在必行。当今社会正快速向信息化社会前进&#xff0c;信息自动化的作用也越来越大。从而使我们从繁杂的…

CSS选择器详解:常见类型与应用

在CSS(层叠样式表)中,选择器是定义样式规则的关键部分,它决定了哪些HTML元素会应用这些样式。CSS选择器类型丰富多样,能够精确地定位到页面中的特定元素。本文将详细介绍CSS中常见的选择器类型,并通过实例说明它们的应用场景。 一、元素选择器 元素选择器是最基础的选择…

Luhn验证银行卡号是否合法

package com.dcqq.common.utils;public class LuhnUtil {public static void main(String[] args) {boolean b checkBankCardId("62290860202331251");System.out.println(b);}/*** 检验银行卡号是否合法* 采用Luhn算法检验* 校验算法步骤&#xff1a;* 1、从卡号最…

鼠标事件(点击换色)分别使用js和jQuery代码实现

js代码实现&#xff1a;按键盘时换色&#xff0c;不按是另一个色。 <body>输入你的名字: <input type"text"><p>在以上输入框中输入你的名字。</p><script type"text/JavaScript">let onedocument.getElementsByTagName(in…

上位机图像处理和嵌入式模块部署(qmacvisual跳转语句)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们依次讨论了判断语句和结束判断语句&#xff0c;今天我们继续学习跳转语句。从功能上面来说&#xff0c;跳转语句和判断语句较为类似。不过…

时间序列预测的零样本学习是未来还是炒作:TimeGPT和TiDE的综合比较

最近时间序列预测预测领域的最新进展受到了各个领域&#xff08;包括文本、图像和语音&#xff09;成功开发基础模型的影响&#xff0c;例如文本&#xff08;如ChatGPT&#xff09;、文本到图像&#xff08;如Midjourney&#xff09;和文本到语音&#xff08;如Eleven Labs&…

【JS】html字符转义

需求 将html转为字符串将html字符串转义&#xff0c;比如<div>转为<div> 码 /*** html标签字符转义* param {Stirng} str 要转换的html字符* returns String 返回转义的html字符串*/ const elToStr str > str.replaceAll(<, <).replaceAll(>, >)…

ChatGPT有身体了,能走向千家万户吗?

3月13日&#xff0c;OpenAI投资的人形机器人——Figure 01迎来重磅更新&#xff0c;接入最新版ChatGPT后&#xff0c;它能和人交流描述眼前看到的事物。在视频中&#xff0c;Figure 的人形机器人&#xff0c;可以完全与人类流畅对话&#xff0c;还能理解人的自然语言指令进行抓…

JDK、JRE和JVM的区别

一、JDK java development kit java开发工具包 负责开发、编译和运行java代码 二、JRE java runtime environment java运行时环境 负责运行java类&#xff0c;比如运行jar包&#xff0c;无需开发的话&#xff0c;只安装JRE即可 三、JVM java virtual machine java虚拟机…

搞懂分布式技术:缓存更新的套路

目录 缓存更新的套路 Cache Aside Pattern Read/Write Through Pattern Read Through Write Through Write Behind Caching Pattern 再多唠叨一些 缓存更新的套路 看到好些人在写更新缓存数据代码时&#xff0c;先删除缓存&#xff0c;然后再更新数据库&#xff0c;而后续的操作…

代码随想录 -- 回溯算法

文章目录 回溯算法理论什么是回溯法回溯法的效率回溯法解决的问题理解回溯法回溯法模板 组合问题I描述题解优化 组合总和III描述题解 电话号码的字母组合描述题解 组合总和描述题解 组合总和II描述题解 分割回文串描述题解 复原IP地址描述题解 子集描述题解 子集II描述题解 递增…

shallowReactive浅层式响应对象

一、 reactive 和ref 都是深层响应式对象: 就是不管对象有多少层&#xff0c;修改此对象任一属性都会响应式处理 shallowReactive 和shallowRef 浅层响应式对象: 只会修改第一层对象&#xff0c;修改此对象第一层属性&#xff0c;视图会有同步变化&#xff0c;非第一层&#xf…

Webapi 日志过滤器(接口日志记录)

/// <summary> /// 日志过滤器 /// </summary> public class LogFilter : IAsyncActionFilter {private readonly ILogger<LogFilter> _logger;public LogFilter(ILogger<LogFilter> logger){_logger logger;}public async Task OnActionExecutionAsy…

WorkPlus Meet局域网视频会议软件的领先解决方案

局域网视频会议软件在现代企业中发挥着重要的作用&#xff0c;而在众多选项中&#xff0c;为何选择WorkPlus Meet作为局域网视频会议软件&#xff1f; 选择局域网视频会议软件时需要考虑到企业的需求。WorkPlus Meet提供了稳定、高效的局域网视频会议功能&#xff0c;能够满足…

关于d3dx9_43.dll文件丢失的解决办法,六种详细方法

当d3dx9_43.dll文件缺失时&#xff0c;系统会显示错误信息来提示用户。这些错误信息可能会包含类似于"d3dx9_43.dll未找到"或"找不到d3dx9_43.dll"等字样。通常出现这样的字样那就是导致应用程序通常无法正常启动或执行相关功能。那么出现这样的功能有什么…

哔哩哔哩后端Java一面

前言 作者&#xff1a;晓宜 个人简介&#xff1a;互联网大厂Java准入职&#xff0c;阿里云专家博主&#xff0c;csdn后端优质创作者&#xff0c;算法爱好者 最近各大公司的春招和实习招聘都开始了&#xff0c;这里分享下去年面试B站的的一些问题&#xff0c;希望对大家有所帮助…