Компонент React не отображается - React. js, Express, JSX, Node.js - PullRequest
0 голосов
/ 26 мая 2020

Я следую простому туториалу React, код которого можно увидеть здесь (в настоящее время в версии 3.2). Я пытаюсь создать простой компонент React в моем файле index.js. Оттуда я визуализирую его в index.ejs в div с именем Root. Есть еще один div, который берет содержимое из моего server.js файла. В настоящее время отправляется только «...»

Проблема в том, что компонент App не отображается на странице, и консоль регистрирует ошибку:

Uncaught Error: Target container is not a DOM element.
    at Object.render (react-dom.development.js?61bb:24828)
    at eval (index.js?b635:4)
    at Module../src/index.js (bundle.js:229)
    at __webpack_require__ (bundle.js:20)
    at bundle.js:84
    at bundle.js:87

Между тем, многоточие из server.js отображается без проблем.

Мой index.js файл

import React from 'react';
import ReactDOM from 'react-dom';

const App = () => {
    return (
        <h2>
            Hello React Components!
        </h2>
    );
};

ReactDOM.render(
  <App />,

  document.getElementById('Root'),
);

Мой index.ejs файл

<%- include('header') -%>
<div id="Root"></div>
<div><%- content -%></div>
<%- include('footer') -%>

Захватываются верхний и нижний колонтитулы:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Hello EJS+JSX</title>
</head>
<body>
<script src="/bundle.js" charset="utf-8"></script>

</body>
</html>

Мой server.js файл

import config from './config';
import apiRouter from './api';

import express from 'express';
const server = express();

server.set('view engine', 'ejs');

server.get('/', (req, res) => {
  res.render('index', {
    content: '...',
  });
});

server.use('/api', apiRouter);
server.use(express.static('public'));

server.listen(config.port, () => {
  console.info('Express listening on port', config.port);
});

И, наконец, поскольку я использую пользовательский webpack.config, вот и он

const path = require('path');

module.exports = {
    entry: './src/index.js',
    output: {
        path: path.resolve('public'),
        filename: 'bundle.js',
    },
    module: {
        rules: [
            {
                test: /\.js$/, 
                exclude: /node_modules/,
                use: {
                    loader: 'babel-loader',
                }
            }
        ]
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...