首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在重新渲染期间保持外部窗口上的React Portal显示

,可以通过以下步骤实现:

  1. 确保React Portal的容器元素在外部窗口中存在,并且在重新渲染期间不会被移除或替换。
  2. 使用React的ReactDOM.createPortal()方法创建Portal,并将其渲染到外部窗口中的容器元素中。这样可以确保Portal的内容在重新渲染期间保持不变。
  3. 在组件的生命周期方法中,将Portal的内容作为子组件进行渲染。这样,在组件重新渲染时,Portal的内容不会被重新创建或销毁。

以下是一个示例代码:

代码语言:txt
复制
import React from 'react';
import ReactDOM from 'react-dom';

class MyComponent extends React.Component {
  componentDidMount() {
    // 在外部窗口中创建容器元素
    this.portalContainer = document.createElement('div');
    document.body.appendChild(this.portalContainer);
  }

  componentWillUnmount() {
    // 组件卸载时移除容器元素
    document.body.removeChild(this.portalContainer);
  }

  renderPortalContent() {
    // 在Portal中渲染内容
    return (
      <div>
        <h1>这是Portal中的内容</h1>
        <p>这里可以放置任意React组件</p>
      </div>
    );
  }

  render() {
    return (
      <div>
        {/* 在组件的生命周期方法中渲染Portal的内容 */}
        {ReactDOM.createPortal(this.renderPortalContent(), this.portalContainer)}
        {/* 其他组件内容 */}
      </div>
    );
  }
}

在上述示例中,我们在componentDidMount()方法中创建了一个容器元素,并将其添加到外部窗口的document.body中。在componentWillUnmount()方法中,我们移除了容器元素,以防止内存泄漏。

render()方法中,我们使用ReactDOM.createPortal()方法将Portal的内容渲染到容器元素中。这样,在组件重新渲染时,Portal的内容不会被重新创建或销毁,从而保持在外部窗口上显示。

请注意,以上示例中没有提及具体的腾讯云产品,因为在这个特定的问题中,与云计算品牌商无关。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ReactPortals传送门

React以控制Portal节点及其生命周期: Portal未脱离React组件树,当通过Portal渲染子组件时,React仍然可以控制组件生命周期。...结构不一样了,但是React树中合成事件依然保持着嵌套结构,C组件作为B组件子元素,事件捕获时依然会从B -> C触发MouseEnter事件,基于此我们可以实现非常有意思一件事情,多级嵌套弹出层...-- ... --> 从树形结构中我们可以看出来,虽然DOM结构中我们现实出来是平铺结构,但是React事件树中却依旧保持着嵌套结构,那么我们就很容易解答最开始一个问题...,而此时我们将鼠标移动到portal元素时,这个portal元素并不会消失,而是会一直保持显示,在这里React树是不存在嵌套结构,所以这里需要对事件进行特殊处理。...设置为true然后显示portal,那么此时重点来了,我们这里实际上会有一个delay延时,也就是说实际上当我们移出元素时,delay时间之后才会将元素真正隐藏,那么如果此时我们将鼠标再移入到portal

25050

阿里前端二面高频react面试题

(1)propsprops是一个从外部传进组件参数,主要作为就是从父组件向子组件传递数据,它具有可读性和不变性,只能通过外部组件主动传入新props来重新渲染子组件,否则子组件props以及展现形式不会改变...来修改,修改state属性会导致组件重新渲染。...对React插槽(Portals)理解,如何使用,有哪些使用场景React 官方对 Portals 定义:Portal 提供了一种将子节点渲染到存在于父组件以外 DOM 节点优秀方案Portals...对于React而言,每当应用状态被改变时,全部子组件都会重新渲染。...**虚拟 DOM 优越之处在于,它能够提供更爽、更高效研发模式(也就是函数式 UI 编程方式)同时,仍然保持一个还不错性能。React中遍历方法有哪些?

1.2K20
  • 阿里前端二面必会react面试题总结1

    通过 shouldComponentUpdate方法中返回 false, React将让当前组件及其所有子组件保持与当前组件状态相同。如何用 React构建( build)生产模式?...props不可以变性就保证相同输入,页面显示内容是一样,并且不会产生副作用对React插槽(Portals)理解,如何使用,有哪些使用场景React 官方对 Portals 定义:Portal...**虚拟 DOM 优越之处在于,它能够提供更爽、更高效研发模式(也就是函数式 UI 编程方式)同时,仍然保持一个还不错性能。React中发起网络请求应该在哪个生命周期中进行?为什么?...componentDidMount方法中代码,是组件已经完全挂载到网页上才会调用被执行,所以可以保证数据加载。此外,在这方法中调用setState方法,会触发重新渲染。...时间分片React 渲染(render)时候,不会阻塞现在线程如果你设备足够快,你会感觉渲染是同步的如果你设备非常慢,你会感觉还算是灵敏虽然是异步渲染,但是你将会看到完整渲染,而不是一个组件一行行渲染出来同样书写组件方式也就是说

    2.7K30

    React 分析器简介

    [火焰图示例] 注意: 条形宽度代表上次渲染组件(及其子组件)时所需耗时。 如果组件本次提交中未重新渲染,则代表之前渲染耗时。 条形图越宽,渲染耗时越长。...条形颜色代表组件(及其子组件)在所选提交中渲染耗时。 黄色组件耗时更多,蓝色组件耗时更少,灰色组件则代表这个提交期间渲染。 例如,上面显示提交总共需要 18.4ms 进行渲染。...这可能是导致 List 组件重新渲染原因。 排行榜 {#ranked-chart} 排行榜视图表示单个提交。 图表中每个条形代表一个 React 组件 (如: App,Nav)。...它还显示了每次渲染时,它都是提交中最"昂贵”组件(意味着它耗时最长)。 要查看此图表,请双击组件 或 选择组件,然后单击右侧详细信息格中蓝色条形图图标。...你还可以双击指定条形来查看该提交更多信息 [如何查看指定组件所有渲染] 如果所选组件分析会话期间没有渲染,将显示以下消息: [所选组件无渲染时间] 交互 {#interactions} React

    3K40

    阿里前端二面常考react面试题(必备)_2023-02-28

    一旦有插入动作,会导致插入位置之后列表全部重新渲染 这也是为什么渲染列表时为什么要使用唯一 key。...(1)props props是一个从外部传进组件参数,主要作为就是从父组件向子组件传递数据,它具有可读性和不变性,只能通过外部组件主动传入新props来重新渲染子组件,否则子组件props以及展现形式不会改变...来修改,修改state属性会导致组件重新渲染。...对React插槽(Portals)理解,如何使用,有哪些使用场景 React 官方对 Portals 定义: Portal 提供了一种将子节点渲染到存在于父组件以外 DOM 节点优秀方案 Portals...React-Router 4怎样路由变化时重新渲染同一个组件? 当路由变化时,即组件props发生了变化,会调用componentWillReceiveProps等生命周期钩子。

    2.8K30

    React 16

    组件级错误处理,支持捕获子组件树内部异常,UI层兜底方案 portal 允许组件树与DOM树结构不一致,用于hovercards,tooltips等场景 例如tooltipDOM结构上target...会对拿到SSR结果做字符级一致性校验,一点不匹配就由client重新生成并整个替掉 React 16允许属性顺序不一致,而且不给自动修复不一致属性,而且遇到不匹配标签结构,会做子树级修改,而不是整个替掉...,解析、绘制、外部资源加载等时间点都提前了 4.不支持Error Boundary和Portal React 16 SSR不支持Error Boundary和Portal 服务端子组件渲染出错,不会被Error...特性可能造成“回流”,与Error Boundary是一个道理,stream机制下无法支持(想要往已经发送出去stream里插入Portal内容,当然不可能) 三.Fiber 全新核心架构,(花了...2年)整个重写了组件渲染机制,最关键特性是异步渲染(async rendering),实现了可调度渲染(彻底解决mount流程一旦开始就无法中断问题) 重构过程 这样庞大一个东西,伤筋动骨重构执行过程很有意思

    91220

    useTransition:开启React并发模式

    同步渲染意味着,一旦开始渲染就无法中断,直到用户可以屏幕上看到渲染结果。 并发渲染中,React 可以开始渲染一个更新,然后中途挂起,稍后又继续;甚至可能完全放弃一个正在进行渲染。...一旦 React 完成原始重新渲染,它会立即开始使用新延迟值处理后台重新渲染。由事件(例如输入)引起任何更新都会中断后台重新渲染,并被优先处理。...如果在渲染期间创建了一个新对象,并立即将其传递给 useDeferredValue,那么每次渲染时这个对象都会不同(使用 Object.is 进行比较),这将导致后台不必要重新渲染。...执行延迟重新渲染默认是可中断。这意味着,如果 React 正在重新渲染一个大型列表,但用户进行了另一次键盘输入,React 会放弃该重新渲染,先处理键盘输入,然后再次开始在后台渲染。...相比之下,防抖和节流仍会产生不顺畅体验,因为它们是阻塞:它们仅仅是将渲染阻塞键盘输入时刻推迟了。 如果要优化工作不是渲染期间发生,那么防抖和节流仍然非常有用。

    21200

    React Advanced Topics

    Portals Portal提供了一种将子节点渲染到存在于父组件以外DOM节点优秀方案。...错误边界渲染期间、生命周期方法和整个组件树构造函数中捕获错误。...与render方法和生命周期方法不同,事件处理器不会再渲染期间触发。因为,如果它们抛出异常,React仍然能够知道需要在屏幕上显示什么。...于是 React 以下两个假设基础之上提出了一套 O(n) 启发式算法: 两个不同类型元素会产生出不同树; 开发者可以通过 key prop 来暗示哪些子元素不同渲染下能保持稳定;...基于拉方法使框架(React)变得智能,并为您做出那些决定。 目前,React并未充分利用调度优势。更新导致立即重新渲染整个子树。

    1.7K20

    React 16 新特性全解(上)

    捕获范围: 渲染期间 生命周期内 整个组件树构造函数内 如何使用: // 先定一个组件ErrorBoundary class ErrorBoundary extends React.Component...三、react portal 介绍这个新特性之前,我们先来看看为什么需要portal没有portal之前,如果我们需要写一个Dialog组件,我们会这样写。...2、层级关系不清晰,dialog实际是独立app之外。 所以这时候Portal降临。...Portal可以帮助我们JSX中跟普通组件一样直接使用dialog, 但是又可以让dialog内容层级不在父组件内,而是显示独立于原来app在外同层级组件。...没有portal生成与有portal时候生成层级关系如下: ? ? 可以很清楚看到,使用portal之后,modal不在嵌app-root里。

    1.5K20

    【技术圈】 React 16.13.0 发布、Firefox 将禁用 TLS 1.01.1

    新增 Render 期间某些更新警告 渲染期间React 组件不应在其他组件中引起副作用。 支持 setState 渲染期间调用,但仅针对同一 component。...如果 setState 在其他组件上渲染期间调用,现在将看到警告: Warning: Cannot update a component from inside the function body of...此警告将帮助您查找由于意外状态更改导致应用程序错误。极少数情况下由于渲染而有意要更改另一个组件状态情况,可以将 setState 调用包装到 useEffect 中 。... React 中 Portals 提供了一种很好将子节点渲染到父组件以外 DOM 节点方式。...例如:我们写一个弹出框组件 Modal 时,这个组件其实不属于父组件,但是由于我们要把它显示出来,我们必须要把它挂在到父组件下,这是就可以用到 createPortal,我们将它渲染到父组件以外,但是我们可以通过

    1.3K10

    react-native布局与组件

    经典资料参考:阮一峰flex 布局语法篇:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html FlexBox提供了不同尺⼨设备上都能保持一致布局...]形式返回多个兄弟组件。 SafeAreaView:安全区 SafeAreaView 目的是一个“安全”可视区域内渲染内容。...Text:文本容器 主要用于显示文本,具有响应之特性(表现为触摸时是否支持高亮)。同时支持多层嵌套,因此样式可继承(内部继承外部)。...FlatList 和 SectionList 底层实现:VirtualizedList通过维护一个有限渲染⼝(其中包含可⻅元素),并将渲染⼝之外元素全部用合适定⻓空⽩空间代替⽅式,极⼤改善了内存使...这个渲染⼝能响应滚动行为,元素离可视区越远优先级越低,越近优先级越高,当用户滑动速度过快时,会出现短暂空⽩情况。

    5.2K20

    React模式对话框 转

    16.x版本之后React提供了Protals功能来解决模式对话框不在Dom根节点导致一些BUG。...React中有三种方式实现模式对话框: 使用一个常规组件作为一个模式对话框包装组件,然后将我们自定义内容作为子组件传递给模式对话框。...例如:https://github.com/tajo/react-portal 将模式对话框作为整个组件结构中顶层组件(根元素子组件),通过全局数据来控制他显示或隐藏。...第三种方式笔者看来是最合理最优秀,下面就谈谈这种实现方式思路。 全局数据流控制模式对话框 实际上就是用flux或redux方式去控制对话框显示或关闭。...当我们通过某种方式将 store.currentModal 值修改为 signIn 后,ModalConductor 会触发重新渲染并在内部判断要渲染 SignIn 组件。

    2.2K30

    腾讯前端必会react面试题合集_2023-02-27

    之前调度算法中,React 需要实例化每个类组件,生成一颗组件树,使用 同步递归 方式进行遍历渲染,而这个过程最大问题就是无法 暂停和恢复。...Keys 是 React 用于追踪哪些列表中元素被修改、被添加或者被移除辅助标识。 React渲染集合时,向每个重复元素添加关键字对于帮助React跟踪元素与数据之间关联非常重要。...无论你何处渲染一个 ,都会在应用程序 HTML 中渲染锚()。...React Portal 有哪些使用场景 以前, react 中所有的组件都会位于 #app 下,而使用 Portals 提供了一种脱离 #app 组件 因此 Portals 适合脱离文档流(out...,返回那个函数也只会最终组件卸载时调用一次; [source]参数有值时,则只会监听到数组中值发生变化后才优先调用返回那个函数,再调用外部函数。

    1.7K20

    React v16 新特性实践

    this.props.children, node ); } } 例如以上代码, 通过 把里面的 内容渲染到了一个独立节点上...但当点击 img 时,仍然可以神奇触发到 Creater 内 div 上 onclick 事件。这里实际依赖于 React 代理和重写了整套事件系统,让整个抽象组件树逻辑得以保持同步。...四、Context API 以前版本中 Context API 是作为未公开实验性功能存在,随着越来越多声音要求对其进行完善, v16.3 版本,React 团队重新设计并发布了新官方 Context...这里可以通过传入 value 修改 Context 中数据,当value变化时候,涉及 Consumer 内整个内容将重新 render: class App extends React.Component...因此不建议滥用 Context,对于某些非全局业务数据,也不建议作为全局 Context 放到顶层中共享,以免导致过多 Context 嵌套和频繁重新渲染

    1.9K80

    用微前端方式搭建类单页应用

    iframe嵌入显示区大小不容易控制,存在一定局限性 URL记录完全无效,页面刷新不能够被记忆,刷新会返回首页 iframe功能之间跳转是无效 iframe样式显示、兼容性等都具有局限性 考虑到这些问题...整套机制中,比较核心部分是路由注册机制,“子项目”路由应该由自己控制,而整个系统导航是“Portal项目”提供。...,把“子项目”数据流挂载了redux上 “子项目”弹出全部挂载一个全局div上,并为这个div添加对应项目作用域,配合“子项目”构建CSS,确保弹出框样式正确 上述代码中还看到了app.define...JS公共库版本统一 为了不侵入“子项目”,我们采用构建过程中替换方式来做,“Portal项目”把公共库引入进来,重新定义,然后通过window.app.require方式引用,在编译“子项目”时候...define 代码和示例如下: /** * 重新定义包 * @param name 引用包名,例如 react * @param context 资源引用器 实际上是 webpackContext

    1.7K31

    Vue3 & React Hooks 新UI组件原理:Modal 弹窗

    为了能够不同声明周期函数中使用缓存一些数据,这里 inserted 时候就把当前节点父节点和替换成 dom 节点(一个注释节点),以及节点是否移出去状态都记录在外部一个 map 中,这样可以在其他声明周期函数中使用...React官方也意识到构建脱离于父组件组件挺麻烦,于是v16版本推了一个叫“Portal功能。而Vue3也是借鉴并吸纳了优秀插件,将Portal作为内置组件了。...1.3 传送门Portal方案 ? React / Vue第二套方案都是基于操作虚拟dom: 「定义一套组件,将组件内 vnode/ReactDOM 转移到另外一个组件中去,然后各自渲染。」...ReactPortal React Portal之所以叫Portal,因为做就是和“传送门”一样事情:render到一个组件里面去,实际改变是网页上另一处DOM结构。...ReactDOM.createPortal(child, container) 第一个参数(child)是任何可渲染 React 子元素,例如一个元素,字符串或碎片。

    2.8K41

    《精通reactvue组件设计》之配合React Portals实现一个功能强大抽屉(Drawer)组件

    通过组件设计过程,大家会接触到一个完成健壮组件设计思路和方法,也能在实现组件过程逐渐对react/vue高级知识和技巧有更深理解和掌握,并且企业实际工作做游刃有余....二次封装一个可实时预览json编辑器组件(react版) 正文 开始组件设计之前希望大家对css3和js有一定基础,并了解基本react/vue语法.我们先看看实现后组件效果: ?...属性俩判断是否该更新这个state, 如果destroyOnClose为true,说明要更新,那么此时当用户点击关闭按钮时候, 组件将重新渲染, 在用户再次点开抽屉时, 我们根据props.visible...变化,来重新让子组件渲染出来,这样就实现了组件卸载完整流程. 2.4 实现getContainer getContainer主要用来控制抽屉组件渲染位置,默认会渲染到body下, 为了提供更灵活配置...这块实现我们可以采用React Portals来实现,具体api介绍如下: Portal 提供了一种将子节点渲染到存在于父组件以外 DOM 节点优秀方案。

    1.7K31

    useTransition真的无所不能吗?🤔

    App将保持切换Button状态并渲染正确组件。...但一旦状态更新被触发,React会义无反顾「同步地计算所有必要更新,重新渲染所有需要重新渲染组件」,将这些更改提交到DOM,以便它们显示屏幕上。...我们可以控制台输出中看到这种行为:通过点击Button触发「所有重新渲染都将被记录」,即使在此期间屏幕被冻结。 点击顺序为A->B->C 3....(上)/React_Fiber机制(下)) ❞ 回到上面的问题,之前代码中,我们遇到情况是,点击button渲染对应内容时,其中一个组件(B)非常慢并且阻塞用户交互,而这种情况正好撞到了并发渲染口上了...耗时B页面重新渲染不再阻止阻塞页面的渲染了。 我们之前就聊过Memo情况。React Memo不是你优化第一选择。

    39610
    领券