- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我明白 it's probably a bad idea至 ReactDOM.render()
进入 document.body
。但是使用 ReactDOM.createPortal()
有什么问题吗?用 document.body
?
尝试寻找当您渲染到主体中时 React 变得疯狂的示例,以便我可以使用 createPortal 对其进行测试,但我找不到任何示例。
为了把事情放在上下文中,这是我正在谈论的示例用法:
import React from 'react';
import ReactDOM from 'react-dom';
export default class Modal extends React.Component {
render() {
return ReactDOM.createPortal(
<div className='modalContainer'>
<div className='modalBox'>
{this.props.children}
</div>
</div>,
document.body
);
}
}
此模式没有遇到任何问题,但我想知道在我开始添加更多库时是否会产生任何后果。
最佳答案
我很确定相同的规则适用于门户网站,就像ReactDOM.render
的使用一样。根据portals documentation你提供的,从 React 的 Angular 来看,门户确实是 React 应用程序的子级(考虑例如合成 DOM 事件传播的方向),但实际上门户位于单独的上下文中,React 仍然需要保持跟踪状态变化并与 DOM 同步。
如果此类上下文的父元素是 body
元素,那么相同数量的意外惊喜 就像通过第 3 方工具插入元素一样处于危险之中,如所述在 Dan Abramov's article .简而言之:由于来自第 3 方的那些 DOM 突变发生在 React 的控制之外,但修改了受 React 控制的 DOM 部分,这可能导致冲突和不一致。
@RIYAJ KHAN 在他的评论中提出的另一点是如果门户突然成为应用程序的父级会发生什么,特别是如果 React 以相反的方式看待它们?我至少能想到的是 native 和 synthetic DOM 事件传播之间的不一致,这两者会在应用程序和门户容器之间以相反的方向传播事件,这可能会令人难以置信如果您经常使用这两种类型的事件处理(例如,React 组件的事件处理程序中的合成和 RxJS 运算符中的 native )。
最后但同样重要的是,如果您有更多这样的门户,它们应该位于顶级 DOM 级别,您是否要为所有这些重用 body
?这与上述两点一起会造成困惑。
最安全的方法是在 body
下为门户创建专用的 div
,这样它们就可以保持干净并且没有不需要的魔法。
关于javascript - 将 ReactDOM.createPortal() 与 document.body 一起使用是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49504546/
错误: TypeError: __WEBPACK_IMPORTED_MODULE_1_react_dom___default.a.createPortal is not a function Moda
const ref = useRef(null); return ( <> {ref.current !== null && createPortal(Hell
所以我正在使用 ReactDOM.createPortal 在其正常 DOM 放置之外呈现元素。我必须这样做,因为我正在与创建它自己的元素(在我的范围之外)的库进行交互,并且我必须将我的 DOM 元素
我正在使用 React 16 并需要门户,但无法找到有关此功能的任何文档。有谁知道如何使用这个吗? https://github.com/facebook/react/pull/10675 感谢您的建
为了清楚起见,假设我有 3 个组件:, , 我正在尝试渲染 在 内, 没有渲染 (从中调用 )。 parent.js class Parent extends Component { ...
我正在开发一个 React 应用程序并尝试使用 ReactDOM.createPortal()将 html 内容添加到组件外部的 div(称为 ToDoItem)。 {ReactDOM.createP
我正在尝试获取 ReactDOM.createPortal要覆盖容器的内容,我也正在安装它。但是它似乎附加了Child。 是否可以覆盖内容?类似于 ReactDOM.render ? 这是我的代码:
我明白 it's probably a bad idea至 ReactDOM.render()进入 document.body。但是使用 ReactDOM.createPortal() 有什么问题吗?
我一直在绞尽脑汁试图弄清楚如何完成一些我认为很简单的事情(我知道......) 目标是获得一个非常最小和可重用的模态组件,我可以使用触发按钮或w/e在某种HOC中为其设置动画。 我正在使用 creat
新手在这里 react 。 TLDR:我有一个名为 createNotification 的辅助函数当调用时会插入 组件进入 container使用 render() 的元素。如果我使用 create
我使用 React 钩子(Hook)创建了一个应用程序。我有一个辅助函数 onClickOutsideHook(ref, callback)触发 callback当您在提供 ref 的组件外部单击时使
我的 React 应用程序中有这样的代码: import React from 'react'; import ReactDOM from 'react-dom'; import ComponentB
我正在尝试使用 slate-react 制作一个编辑器。我制作了悬停菜单,但 Next.js 渲染存在样式问题。所以我尝试在 Next.js 的默认 ID __next 下使用 React creat
我有一个组件,我在其中渲染了一些按钮。每个按钮都应该有它的工具提示。我想让工具提示在我 :hover 按钮时出现。但是因为我的工具提示不仅可以包含文本,所以我不能使用气球之类的东西,也不能只用 css
我是一名优秀的程序员,十分优秀!