当前位置: 首页 > 知识库问答 >
问题:

何时使用React 16门户

鲁光霁
2023-03-14

React 16发布了许多新功能。其中之一是ReactDOM. createPortal(子,容器)API,这对于直观地脱离其容器很方便。

然而,它似乎不仅打破了它的容器,而且打破了我从web开发的第一天学到的基本html规则。createPortal API使您能够从其父组件中呈现组件,并打破我们预期的html结构约定。

另一方面,我们确实获得了更多的灵活性,现在可以在兄弟或其他组件中渲染DOM。

依我看,我不认为这是一个很好的交易,以获得更多的灵活性,通过交易html公约。官方提供的例子也不能说服我。

我好奇的是:有没有人面临createPortal API是必须的任何条件?

谢啦

共有3个答案

毛成济
2023-03-14

当您需要在父组件的DOM层次结构之外呈现组件时,门户是非常有用的特性。

您可以使用以下语法定义门户:

ReactDOM.createPortal(child, container) 

第一个参数(子参数)是任何可呈现的React子参数,例如元素、字符串或片段。第二个参数(容器)是DOM元素。

请参阅以下教程以了解如何以及为什么使用门户:

https://www.youtube.com/watch?v=lOMU9BeIrO4

殷烨
2023-03-14

几个月前,我遇到了另一个用例。因为React 16门户不可用,所以我不得不使用一个自制的门户实现。

我正在创建SVG图形。所有的行、路径等都需要在

const LabeledPoint = ({ x, y, r, labelText }) => [
    <circle cx={x} cy={y} r={r} />,
    <GraphLabel x={x + 5} y={y}>{labelText}</GraphLabel>,
];

您将在中使用此组件

这样,即使出于技术原因需要在不同的位置呈现实际的DOM元素,单个组件的所有逻辑也可以在一个位置。

贡英华
2023-03-14

文档中的示例createPortal非常有用的一些情况,特别是对话框、悬停卡和工具提示。

文件还特别说明:

注:

请务必记住,在使用门户时,您需要确保遵循适当的可访问性准则。

例如,文档显示了如何使用createPortal()构建模态。您会注意到modal是在#modal-root元素中创建的,它是与#app-root元素并列的根元素。这是一个很好的例子,说明如何在不违反任何超文本标记语言规则的情况下使用createPortal()

<div id="app-root"></div>
<div id="modal-root"></div>
 类似资料:
  • 本文向大家介绍React16新特性有哪些?相关面试题,主要包含被问及React16新特性有哪些?时的应答技巧和注意事项,需要的朋友参考一下 1.使用Error Boundary处理错误组件 2.render支持2种新的返回类型(数组、字符串) 3.使用createProtal 将组件渲染到当前组件树之外 4.自定义DOM属性 :把不会识别的属性传递给DOM 5.setState传入null时不会再

  • 使用入门:  

  • 新手入门 - 使用入门 仅需简单的三步,您就可以使用百度统计进行数据统计与分析: 1 注册/登录账户->2 新建站点、添加代码->3浏览报告,根据分析需求进行高级设置 账户注册、登录 1 . 百度统计账户类型 百度统计账户目前分为「站长版」、「客户版」、「移动统计版」三种 站长版账户 站长版账户面向全部用户开放,为您提供免费、专业的流量统计分析工具。 客户版账户 主要针对百度推广和网盟客户,在站长

  • 本文向大家介绍Webpack3+React16代码分割的实现,包括了Webpack3+React16代码分割的实现的使用技巧和注意事项,需要的朋友参考一下 项目背景 最近项目里有个webpack版本较老的项目,由于升级和换框架暂时不被leader层接受o(╥﹏╥)o,只能在现有条件进行优化。 webpack v3配置检查 很明显项目的配置是从v1继承过来的,v1->v3的升级较为简单,参考官网ht

  • 问题内容: 我一直在nodejs中编程,研究了如何同时使用socket.io和对节点服务器的ajax调用。socket.io是否设计为替代ajax?我很好奇,在哪种情况下使用socket.io更好,而哪种ajax更好。感谢您的输入。 问题答案: 好吧,Web套接字(通过socket.io)提供的主要内容之一就是ajax缺乏的是服务器推送。因此,对于ajax,如果您想了解服务器上的新事件(例如,另一

  • 问题内容: 嗨,任何人都可以告诉我如何在linux中处理软件看门狗。我有一个程序“ SampleApplication”,该程序连续运行,如果程序异常挂起或关闭,则需要重新启动它。 我正在谷歌上搜索,发现linux在/ dev / watchdog拥有看门狗,但不知道如何使用它。有人可以帮我举个例子。 我的问题是在哪里指定我的应用程序名称和重新启动的延迟间隔。由于我是Linux新手,请尽可能向我介