React-router 无法在服务器端渲染

标签 react-router

我正在尝试使用react-router在服务器端渲染一个简单的模型。

这是代码

import express from 'express'
import React from 'react'
import {Router} from 'react-router'
import routes from './routes'
import ReactDOMServer from 'react-dom/server'
var app = express()

app.use((req, res)=> {
    res.send('<!DOCTYPE html>' + ReactDOMServer.renderToString(<Router routes={routes}/>))
})

app.listen('8080', function () {
  console.log('Server started at port 8080')
})

并出现以下错误

不变违规:哈希历史记录需要 DOM

我正在使用最新版本的react-router。我在旧版本上可以正常工作

 import express from 'express'
import React from 'react'
import {Router} from 'react-router'
import routes from './routes'
import ReactDOMServer from 'react-dom/server'
var app = express()

app.use((req, res)=> {
  Router.run(routes, req.path, (Handler) => {
    res.send('<!DOCTYPE html>' + ReactDOMServer.renderToString(<Router routes={routes}/>))
  })
})

app.listen('8080', function () {
  console.log('Server started at port 8080')
})

最佳答案

您需要使用match()功能和<RoutingContext> (<RouterContext> 在 2.x RC 中)在服务器上渲染。请遵循服务器渲染指南:https://github.com/rackt/react-router/blob/v1.0.3/docs/guides/advanced/ServerRendering.md .

关于React-router 无法在服务器端渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34672644/

相关文章:

reactjs - React Router 开关不会为不同的路由安装相同的组件

javascript - 如何通过react router传递和使用查询参数?

react-router - 如何在react-router v4中获取查询参数

javascript - 没有状态管理库的具有数据提取的 SSR

javascript - react 应用程序路由器

python - 将表单数据从 React 句柄提交函数发送到 python API?

reactjs - 路由更改时停止重新渲染组件。尤其是 Routes 之外的组件

javascript - 如何在React的render()中导航到react-router-1.0.3中的组件之外?

javascript - 使用 CSSTransitionGroup 和 React-Router v6 动画路由过渡

javascript - React-router:如何设置默认子路由并相应修改URL