首页 > 其他分享 >createPortal:允许你将 JSX 作为 children 渲染至 DOM 的不同部分。

createPortal:允许你将 JSX 作为 children 渲染至 DOM 的不同部分。

时间:2024-05-16 18:30:12浏览次数:16  
标签:DOM React portal createPortal JSX 节点

官网

createPortal(children, domNode, key?)

import { createPortal } from 'react-dom';

// ...

<div>
  <p>这个子节点被放置在父节点 div 中。</p>
  {createPortal(
    <p>这个子节点被放置在 document body 中。</p>,
    document.body
  )}
</div>

portal 只改变 DOM 节点的所处位置。

在其他方面,渲染至 portal 的 JSX 的行为表现与作为 React 组件的子节点一致。

该子节点可以访问由父节点树提供的 context 对象、事件将从子节点依循 React 树冒泡到父节点。

 

参数 

  • children:React 可以渲染的任何内容,如 JSX 片段(<div /><SomeComponent /> 等等)、Fragment<>...</>)、字符串或数字,以及这些内容构成的数组。

  • domNode:某个已经存在的 DOM 节点,例如由 document.getElementById() 返回的节点。在更新过程中传递不同的 DOM 节点将导致 portal 内容被重建。

  • 可选参数 key:用作 portal key 的独特字符串或数字。

返回值 

createPortal 返回一个可以包含在 JSX 中或从 React 组件中返回的 React 节点。如果 React 在渲染输出中遇见它,它将把提供的 children 放入提供的 domNode 中。

 

警告 

  • portal 中的事件传播遵循 React 树而不是 DOM 树。例如点击 <div onClick> 内部的 portal,将触发 onClick 处理程序。如果这会导致意外的问题,请在 portal 内部停止事件传播,或将 portal 移动到 React 树中的上层。

 

用法 

渲染到 DOM 的不同部分 

portal 允许组件将它们的某些子元素渲染到 DOM 中的不同位置。这使得组件的一部分可以“逃脱”它所在的容器。例如组件可以在页面其余部分上方或外部显示模态对话框和提示框。

调用 createPortal 并传入 JSX 与 应该放置的 DOM 节点 作为参数,然后渲染返回值以创建 portal:

 

import { createPortal } from 'react-dom';

function MyComponent() {
  return (
    <div style={{ border: '2px solid black' }}>
      <p>这个子节点被放置在父节点 div 中。</p>
      {createPortal(
        <p>这个子节点被放置在 document body 中。</p>,
        document.body
      )}
    </div>
  );
}

 

 

标签:DOM,React,portal,createPortal,JSX,节点
From: https://www.cnblogs.com/Simoon/p/18196470

相关文章

  • [SWPUCTF 2021 新生赛]fakerandom 关于random.seed的一些事
    最近开始接触reverse了,难得有些力不从心(本质还是汇编看不懂),来看看这道题吧。点击查看代码importrandomflag='xxxxxxxxxxxxxxxxxxxx'random.seed(1)l=[]foriinrange(4):l.append(random.getrandbits(8))result=[]foriinrange(len(l)):random.se......
  • MajorDoMo RCE(CNVD-2024-02175)
    影响平台MajorDoMo<0662e5e漏洞复现fofa搜索语法:app="MajordomoSL"POC:GET/modules/thumb/thumb.php?url=cnRzcDovL2EK&debug=1&transport=%7c%7c%20%28%65%63%68%6f%20%27%5b%53%5d%27%3b%20%65%63%68%6f%20%31%32%33%3b%20%65%63%68%6f%20%27%5b%45%5d%2......
  • Lossless Recompression of JPEG Images Using Transform Domain Intra Prediction
    目录简介引入文章贡献对DCT系数残差进行编码比对原始DCT系数进行编码更有利于压缩模型框架简介\(\quad\)JPEG图像编码格式由于其简单高效在各种设备和网站上被广泛使用,但JPEG与性能与最先进的编码方法相差甚远。如果能对这些JPEG图像再压缩,将会缩减储存成本。该文章提出了......
  • python教程6.2-OS模块random模块
    OS模块   random模块 ......
  • C. Dreaming of Freedom
    原题链接题解有一个隐含逻辑,n个程序员会齐心协力地使保留的算法不止一个当\(m\geqn\)时,每个程序员各投一个,这样保留了n个算法当\(m\ltn\)时,如果想要不止保留一个算法,那么最后保留的算法一定能被n整除,也就是说,n一定有一个因子小于mcode#include<bits/stdc++.h>usi......
  • JavaScript-DOM简介
    JavaScript-DOM简介之前我们说过JavaScript有三部分组成ECMAscript,BOM,DOM,之前我们都在了解JavaScript的语法即ECMAScript,今天我们开始了解DOM(文档对象模型(DocumentobjectModel),操作网页上的元素的API)什么是DOMDOM:DocumentObjectModel,文档对象模型。DOM为文档提供了结......
  • JS进阶(二)DOM
    1.DOM(DocumentObjectModel)文档对象模型js中对象的分类有三种:用户定义对象内建对象ArrayDateMath等宿主对象(由浏览器创建的对象)modelmap可以将DOM看成一棵“树”。DOM把文档看做一棵家谱树,parent、child、sibling等。整个html文档,会保存一个文档对象document......
  • 解决报错:Could not set property 'id' of 'class com.north.domain.Book' with value
    报错原因问题描述:因为MyBatis-Plus默认的id自增策略使用的雪花算法org.mybatis.spring.MyBatisSystemException:nestedexceptionisorg.apache.ibatis.reflection.ReflectionException:Couldnotsetproperty'id'of'classcom.north.domain.Book'withvalue'1......
  • vue3早已具备抛弃虚拟DOM的能力了
    前言jquery时代更新视图是直接对DOM进行操作,缺点是频繁操作真实DOM,性能差。react和vue时代引入了虚拟DOM,更新视图是对新旧虚拟DOM树进行一层层的遍历比较,然后找出需要更新的DOM节点进行更新。这样做的缺点就是如果DOM树很复杂,在进行新旧DOM树比较的时候性能就比较差了。那么有没......
  • crypto.randomUUID()
    crypto.randomUUID()是一个函数,用于生成一个随机的通用唯一标识符(UniversallyUniqueIdentifier,UUID)版本4。这个函数常在编程中用于创建唯一的字符串标识,适用于各种需要唯一性的场景,如数据库记录、会话管理、临时文件命名等。在不同的编程语言和环境中,其实现细节可能有所不同......