使用反应渲染时如何访问现有的 dom 元素?

Posted

技术标签:

【中文标题】使用反应渲染时如何访问现有的 dom 元素?【英文标题】:How can I access existing dom elements when using react render? 【发布时间】:2018-07-15 23:32:09 【问题描述】:

我将在现有网站中渲染一个 React 组件,根元素的示例可能是:

<div id="root"></div>

我想做的是,访问根元素内的任何 html 以开始,例如:

<div id="root">Hello world</div>

文档seems to indicate 您可以按照以下方式做一些事情:

ReactDOM.render() 不修改容器节点(只修改 容器的孩子)。可以插入一个 组件到现有的 DOM 节点而不覆盖现有的 孩子们。

我尝试使用 refs 访问,但我无法访问这些子 DOM 元素,有谁知道我该如何实现?

<div id="root" ref="root">Hello world</div>

【问题讨论】:

你想对现有的子元素做什么? 为什么不使用状态并将其传递给子元素? 【参考方案1】:

不幸的是,这在 ReactDOM 中是不可能的直接

&lt;div id="root"&gt; 中的“Hello world”字符串被视为容器节点的子节点,因此被覆盖。

相反,您需要从div 获取.innerHTML,ID 为root ReactDOM 的render() 方法被调用之前。之后你可以做任何你想做的事情:

let root = document.getElementById("root");
let existingContent = root.innerHTML;
ReactDOM.render(yourReactComponent, root);
console.log(existingContent); // Do whatever you need to do with this

【讨论】:

听起来很合理,但我希望避免这种情况,文档似乎有点神秘,github.com/facebook/react/issues/4265 这是我遇到的确切问题(以及我发现的 GitHub 问题),最终不得不使用我发布的解决方案。这很烦人,但在他们真正进一步“澄清”之前,我认为没有更好的方法。 这似乎是一个准确的解释

以上是关于使用反应渲染时如何访问现有的 dom 元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过选择器访问 DOM 元素

在反应渲染方法中访问对象属性

如何使用 React.createRef() 在 React 中访问多个 Dom 元素

如何通过 DOM 容器访问 Highcharts 图表?

属性更改时如何重新渲染反应组件

如何以角度访问 DOM 元素