Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 尽管存在所有react路由器版本冲突,如何在react中进行服务器端渲染?_Javascript_Node.js_Reactjs_React Router - Fatal编程技术网

Javascript 尽管存在所有react路由器版本冲突,如何在react中进行服务器端渲染?

Javascript 尽管存在所有react路由器版本冲突,如何在react中进行服务器端渲染?,javascript,node.js,reactjs,react-router,Javascript,Node.js,Reactjs,React Router,我正在尝试使用react和react router dom进行服务器端渲染,我以前也这样做过,但对于新版本,这给我带来了一个错误您不应该在路由器外部使用交换机我认为这是版本冲突,但有解决方案吗() server.js import express from 'express'; import React from 'react'; import ReactDOMServer from 'react-dom/server'; import App from '../client/src/AppRo

我正在尝试使用react和react router dom进行服务器端渲染,我以前也这样做过,但对于新版本,这给我带来了一个错误您不应该在路由器外部使用交换机我认为这是版本冲突,但有解决方案吗()

server.js

import express from 'express';
import React from 'react';
import ReactDOMServer from 'react-dom/server';
import App from '../client/src/AppRoutes';
import { StaticRouter } from 'react-router-dom';
import { renderRoutes } from 'react-router-config'


const app = express();



app.get('*', (req, res) => {
    const routerContext = {};
    res.send(`
    <!doctype html>
    <html lang="en">
      <head>SSR</head>
      <body>
        <div id="root">${ReactDOMServer.renderToString(
            <StaticRouter location={req.url} context={routerContext}>
                    <div>{renderRoutes(App)}</div>
            </StaticRouter>
            )}</div>
<!--        <script src="/dist/main.js"></script>-->
      </body>
    </html>
  `);
});


app.listen(3000, (error) => {
    if (error) {
        return console.log('something bad happened', error);
    }
    console.log("listening on " + 3000 + "...");
});
package.json

{
  "name": "reactSSRwithCodeSplitting",
  "version": "1.0.0",
  "description": "",
  "main": "server/server.js",
  "scripts": {
    "test": "babel-node server/index.js",
    "start": "nodemon server/index.js",
    "build": "babel server --out-dir ./dist --source-maps",
    "serve": "node ./dist/index.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.17.1",
    "react": "^16.9.0",
    "react-dom": "^16.9.0",
    "react-loadable": "^5.5.0",
    "react-router-config": "^5.0.1",
    "react-router-dom": "^5.0.1"
  },
  "devDependencies": {
    "@babel/cli": "^7.5.5",
    "@babel/core": "^7.5.5",
    "@babel/node": "^7.5.5",
    "@babel/plugin-syntax-dynamic-import": "^7.2.0",
    "@babel/preset-env": "^7.5.5",
    "@babel/preset-react": "*",
    "@babel/register": "^7.5.5",
    "chai": "^4.2.0",
    "nodemon": "^1.19.1"
  }
}
快速修复:
  • 删除您的
    节点\u模块
  • 将“^5.0.1”添加到您的
    包中。json
  • 使用
    npm安装重新安装
  • 确保
    react router
    react router config
    react router dom
    的版本相同

    怎么了? 当我试图重现您的错误时,我发现问题中的
    package.json
    缺少
    react router
    依赖项,这使我无法启动服务器

    从您的故事中,我猜您的
    节点_模块中有另一个版本的
    react router
    ,它与
    react router config
    react router dom
    版本5.0.1不同步

    所以我试着用这个来重现问题:

    "react-router": "^4.3.0",
    "react-router-config": "^5.0.1",
    "react-router-dom": "^5.0.1"
    

    这将导致您提到的问题。

    我知道这可能要求有点太高,但您能否设置一个测试环境,以便我们进行测试和修复?不管怎么说,这似乎是可能的?我做了所有的更改,但仍然得到了这个错误
    错误:不变量失败:你不应该在一个
    @Nane之外使用你是这个问题的所有者吗?您是否有沙盒或源代码,以便我可以复制错误?
    "react-router": "^4.3.0",
    "react-router-config": "^5.0.1",
    "react-router-dom": "^5.0.1"