gpt4 book ai didi

javascript - 如何通过单个index.js文件正确渲染多个React组件?

转载 作者:行者123 更新时间:2023-11-28 04:06:11 25 4
gpt4 key购买 nike

我创建了两个 React 组件类,一个创建一个计数器,另一个创建一个包裹在 HTML 标签中的简单字符串。我试图通过我的 index.js 将它们渲染为 HTML 文件,计数器可以工作,但字符串不能,我需要帮助理解原因。 (我已经阅读了多个教程,但似乎找不到一个可以帮助我理解该问题的教程)。

这是我的计数器类(我可以在 HTML 文件中呈现):

import React from 'react';

class Counter extends React.Component{ constructor() {
super();
this.state = {
count: 0,
}; }

render() {
return (
<button
onClick={() => {
this.setState({ count: this.state.count + 1 });
}}
>
Count: {this.state.count}
</button>
); } } export default Counter;

字符串类(我无法在 HTML 中呈现):

import React from 'react';

export class Exactum extends React.Component{

render() {
return (
<p>this is exactum</p>
); } }

export default Exactum;

以及我用来渲染它们的index.js 文件:

import React from 'react';
import ReactDOM from 'react-dom';
import Counter from './components/Counter';
import Exactum from './components/Exactum';

document.addEventListener('DOMContentLoaded', function() {
ReactDOM.render(
React.createElement(Counter),
document.getElementById('mount')
);
});

ReactDOM.render(<Exactum />, document.getElementById('app'));

这是我正在使用的 HTML 文件:

<html>
<head>
<meta charset="UTF-8" />
<title>Counter</title>
<script src="/bundle.js" ></script>
</head>
<body>
<div>
<p>Counter</p>
<div id="mount"></div>
<p>Exactum should appear here:</p>
<div id="app"></div>
</div>
</body>
</html>

最佳答案

您的bundle.js位于应用程序的Head,而不是Body标记的末尾。

为什么在index.js里面有<Counter />有效,而不是 <Exactum />

这是因为您在 Counter 中添加了事件 DOMContentLoaded,因此,当 JavaScript 加载到 HTML 的 Head 中时,该事件不会被触发,因为DOM 未加载,但 ReactDOM 尝试在 DOM 中渲染 Exactum 并失败。

但是当 DOM 完全加载时,会触发 DOMContentLoaded 事件,并且 ReactDOM 可以在 DOM 中渲染 Counter,因为 DOM 现在已加载。

试试这个并告诉我它是否有效:将bundle.js放在<body>的末尾标签。

关于javascript - 如何通过单个index.js文件正确渲染多个React组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46667254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com