html - 通过 Webpack 在多个页面上使用 React.js
问题描述
主要问题:如何停止此错误:Uncaught Error: Target container is not a DOM element
同时使用具有不同元素标签的多个页面。
这可能是我在安装这些工具时忽略的简单结构:React、JSX、Babel 和 Webpack。我已经查看了有关 stackoverflow 和其他地方的所有其他相关问题,但还没有看到这种确切的情况。
React.js 第 1 页示例:
import Navbar from '../../Common/Navbar';
import Info from './Info';
import Activity from './Activity';
import Activities from './Activities';
// Render Navbar
ReactDOM.render(<Navbar/>, document.querySelector('.navbar'));
// Render information
ReactDOM.render(<Info/>, document.querySelector('.left-panel'));
// Render activity
ReactDOM.render(<Activity/>, document.querySelector('.activity-panel'));
// Render activities
ReactDOM.render(<Activities/>, document.querySelector('.activities'));
HTML 第 1 页示例:
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation"></nav>
<div class="container">
<div class="left-panel"></div>
<div class="activity-panel"></div>
<div class="activities"></div>
</div>
React.js 第 2 页示例:
import Navbar from '../../Common/Navbar';
import Info from './Info';
import Activity from './Activity';
import Activities from './Activities';
// Render Navbar
ReactDOM.render(<Navbar/>, document.querySelector('.navbar'));
// Render information
ReactDOM.render(<Main/>, document.querySelector('.main-page'));
HTML 页面 2 示例:
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation"></nav>
<div class="container">
<div class="main-page"></div>
</div>
更多信息:
我知道发生这种情况是因为 bundle.js 文件包含指向不在当前 HTML 页面上的元素标签的 React 元素。我对 React.js 和 Webpack 还很陌生,所以我可能错过了一些关于格式化代码的内容。我只需要知道当JS全部捆绑到一个文件时如何区分页面。
解决方案
更常见的做法是只使用ReactDOM.render
整个 React 组件树的根,但是如果你想这样做,你可以document.querySelector
在渲染之前检查你的调用是否真的找到了 DOM 节点。
import Navbar from '../../Common/Navbar';
import Info from './Info';
import Activity from './Activity';
import Activities from './Activities';
import Main from './Main';
// Render Navbar
const navbar = document.querySelector('.navbar');
if (navbar) {
ReactDOM.render(<Navbar/>, navbar);
}
// Render information
const leftPanel = document.querySelector('.left-panel');
if (leftPanel) {
ReactDOM.render(<Info/>, leftPanel);
}
// Render activity
const activityPanel = document.querySelector('.activity-panel');
if (activityPanel) {
ReactDOM.render(<Activity/>, activityPanel);
}
// Render activities
const activities = document.querySelector('.activities');
if (activities)
ReactDOM.render(<Activities/>, activities);
}
// Render information
const mainPage = document.querySelector('.main-page');
if (mainPage) {
ReactDOM.render(<Main/>, mainPage);
}
推荐阅读
- sql - 选择计数和最大值
- python-3.6 - 为什么从 Tensorflow Record 文件中读取大张量的速度如此之慢?
- visual-studio-code - 当我在实时服务器中运行 HTML 文件时,它总是显示在新窗口中
- html - 我不明白 MDN 中提到的有关 HTML 元素的一行
- excel - Google 表格中的地址公式
- c - `qsort()` 可以按升序授予排序数组吗?
- security - 网站如何验证用户是否安全登录?
- css - Bootstrap4 - 具有 100% 高度和内部滚动的列的布局
- php - Laravel Group 和 Sum hasMany 关系
- php - Laravel 模型:引用模型的平均值(子查询)