如何在通过 class 名称检索到的 DOM 节点内呈现 React 组件?
How can I render a React component inside a DOM node retrieved via class name?
HTML:
<body>
<div class="root"></div>
</body>
JavaScript:
import ReactDOM from "react-dom";
function App() {
return ReactDOM.render(
<h1>Hello, world!</h1>,
document.getElementsByClassName("root")
);
}
export default App;
编译此代码后,我得到以下消息“错误:目标容器不是 DOM 元素。”
有人知道为什么吗?
- 您正在获取多个元素,而不是一个。
ReactDOM.render
中的第二个参数应该是一个元素,而不是元素列表。
- 如果您想使用
class
而不是 id
,使用 document.querySelector(".root")
作为您的第二个参数可能更为谨慎。
document.getElementsByClassName() 在 return 中给出一个数组而不是一个元素。
你可以这样做 -
document.getElementsByClassName("root")[0]
或更改 getElementById("root");
并将 class="root" 更改为 id="root".
方法 getElementsByClassName
returns 一个类似数组的对象而不是像 react-dom 这样的 DOM 元素需要 (DOCS).
如果您想查询名称为 class 的单个 DOM 元素,您可以使用 querySelector 方法,该方法 returns 文档中的第一个元素匹配指定的选择器
document.querySelector(".root")
HTML:
<body>
<div class="root"></div>
</body>
JavaScript:
import ReactDOM from "react-dom";
function App() {
return ReactDOM.render(
<h1>Hello, world!</h1>,
document.getElementsByClassName("root")
);
}
export default App;
编译此代码后,我得到以下消息“错误:目标容器不是 DOM 元素。”
有人知道为什么吗?
- 您正在获取多个元素,而不是一个。
ReactDOM.render
中的第二个参数应该是一个元素,而不是元素列表。 - 如果您想使用
class
而不是id
,使用document.querySelector(".root")
作为您的第二个参数可能更为谨慎。
document.getElementsByClassName() 在 return 中给出一个数组而不是一个元素。
你可以这样做 -
document.getElementsByClassName("root")[0]
或更改 getElementById("root"); 并将 class="root" 更改为 id="root".
方法 getElementsByClassName
returns 一个类似数组的对象而不是像 react-dom 这样的 DOM 元素需要 (DOCS).
如果您想查询名称为 class 的单个 DOM 元素,您可以使用 querySelector 方法,该方法 returns 文档中的第一个元素匹配指定的选择器
document.querySelector(".root")