Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 内存门户中的反应_Reactjs_React Portal - Fatal编程技术网

Reactjs 内存门户中的反应

Reactjs 内存门户中的反应,reactjs,react-portal,Reactjs,React Portal,我确实希望在内存中(而不是在DOM中)创建一个React组件树,其行为与React门户相同,即它应该使用父组件树中的上下文 那么,是否可以创建类似门户的东西,而不是在DOM节点上渲染它,而是在内存中“渲染”它(在DOM之外) 请注意,我需要的是树中某些组件的组件生命周期,而可视部分将被隐藏,但在我的情况下,如果我将组件树放在DOM中的一个隐藏div中,则性能不好,然后我想测试另一种方法。我想到了两种可能性: 1) 创建文档片段的入口 使用ReactDOM.createPortal时,可以将其指向

我确实希望在内存中(而不是在DOM中)创建一个React组件树,其行为与React门户相同,即它应该使用父组件树中的上下文

那么,是否可以创建类似门户的东西,而不是在DOM节点上渲染它,而是在内存中“渲染”它(在DOM之外)


请注意,我需要的是树中某些组件的组件生命周期,而可视部分将被隐藏,但在我的情况下,如果我将组件树放在DOM中的一个隐藏div中,则性能不好,然后我想测试另一种方法。

我想到了两种可能性:

1) 创建文档片段的入口

使用ReactDOM.createPortal时,可以将其指向内存中的documentFragment,而不是页面上的元素。然后,应将创建的节点附加到内存中的该片段。我不确定这是否符合你的标准,但看起来是这样的:

class Example extends Component {
  constructor (props) {
    super(props);
    this.fragment = document.createDocumentFragment();
  }

  render() {
    return ReactDOM.createPortal(
      this.children,
      this.fragment
    );

  }
}
2) 创建自定义对账器

如果希望数据以某种特定格式输出,而不是作为DOM节点,则可以创建自定义协调器。这是一件非常重要的事情,它使用react reconciler包,react团队将其描述为“实验性的”,但它可以让您非常精确地控制如何处理渲染结果


如果这是您想做的事情,您可以在上阅读一些,查看用于其他对账器的配置文件可能会很有用(请参阅自述文件底部附近的“主机配置”链接)

您可以使用
react dom/server
方法
renderToStaticMarkup()
在不渲染到实际DOM的情况下获取DOM节点。我不确定这是否是要求。不,我需要在装入父级时维护装入的隐藏组件。不幸的是,无法在门户上使用自定义对账器-