Пытаясь заставить реагировать-маршрутизатор на моем сервере Node / Express и на интерфейсе React, я сталкиваюсь с этим предупреждением при попытке создать
React.createElement: недопустимый тип - ожидается строка
В поисках ответов я обнаружил этот уже заданный вопрос
React.createElement: недопустимый тип - ожидается строка
Из них решения с участием * проверка всех моих экспортных компонентов класса по умолчанию ... * Импорт BrowserRouter из реактивного роутера против реактивного роутера
Не исправляйте мою проблему. Кроме того, когда я открываю DevTools в Chrome, я вижу, что страница пуста, React не заполнил мой корневой div и, помимо всего прочего, есть ошибка в консоли client-bundle.js:1 Uncaught SyntaxError: Unexpected token <
Когда я нажимаю на эту ошибку, она приводит меня к источнику моего client-bundle.js, который не содержит javascript, но содержит разметку шаблонного html.
Я читал примеры, руководства и документацию, но еще не нашел источника своих ошибок. Я надеюсь, что кто-то здесь может увидеть что-то, чего я не вижу
umleto.js
import express from 'express';
import router from './routing/router';
// Basic config
const PORT = 3000;
const HOST = 'localhost';
const app = express();
// Setup server side router
router(app);
// Setup EJS template engine
app.set('views', `${__dirname}/views`);
app.set('view engine', 'ejs');
// Start server
const server = app.listen(PORT, () => console.info(`Listening to ${HOST}:${PORT}`));
маршрутизация / router.js
import React from 'react';
import { renderToString } from 'react-dom/server';
import { StaticRouter } from 'react-router';
import Routes from './Routes';
import NotFoundPage from '../frontend/components/NotFoundPage';
// React Router as middleware
const router = (req, res, next) => {
const context = { routes: Routes, location: req.url };
const markup = renderToString( <StaticRouter context = {context} /> );
res.render('index', { markup });
next();
}
export default (app) => app.use(router);
маршрутизация / Routes.jsx
import React from 'react';
import { Route, IndexRoute, Switch } from 'react-router';
import Layout from '../frontend/components/Layout';
import NotFoundPage from '../frontend/components/NotFoundPage';
import IndexPage from '../frontend/components/IndexPage';
// Client Side Routing
const Routes = (
<Route path = "/" component = {Layout}>
<IndexRoute component = {IndexPage}/>
<Route path = "*" component = {NotFoundPage}/>
</Route>
);
export default Routes;
У меня есть настройка репозитория git hub на случай, если кто-то захочет лучше взглянуть на мой код проблемы. https://github.com/slipsnip/UMLeto
Я просто попробовал это изменение, я также изменил еще несколько ссылок с response-router на react-router-dom в то же время и мне удалось удалить предупреждение, хотя ошибка все еще существует и по-прежнему нет визуализированного вывода. Я начинаю сомневаться в том, что погода parceljs имеет к этому какое-то отношение, потому что я использую его как сборщик пакетов.





Я решил исходную проблему React.createElement: type is invalid -- expected a string, изменив свой сборщик с Parceljs на Webpack, похоже, это связано с инструментом сборки.
Хотя эта проблема решена, новая была представлена как Error: Failed to lookup view "index" in views directory "//views" в браузере и Error: Can't set headers after they are sent. в консоли после обновления. В настоящее время изучаю эту новую проблему. Я думаю, что лучше всего мне принять этот ответ, потому что новая проблема не имеет отношения к нему.
Может ли кто-нибудь проинструктировать меня о наилучшем подходе, принять этот ответ или подождать, чтобы узнать, что скажут другие? об этой новой итерации ошибок.
На первый взгляд, не следует ли называть router.js router.jsx из-за того, что в нем есть теги JSX?