【发布时间】:2017-05-20 02:25:08
【问题描述】:
我正在尝试使用最新版本的 react-router v.4 设置服务器端渲染。我遵循了本教程https://react-router.now.sh/ServerRouter。
刷新浏览器时出现以下错误:Invariant Violation: React.Children.only 预计会收到单个 React 元素子元素。
我的 routes.jsx 文件:
export default () =>
<div>
<Header />
<Match pattern="/" component={Home} />
<Match pattern="/about" component={About} />
<Miss component={NotFound} />
</div>;
在 index.jsx 我正在渲染应用程序
import BrowserRouter from 'react-router';
import Routes from './routes';
ReactDOM.render(<BrowserRouter> <Routes /> </BrowserRouter>, document.getElementById('app'));
现在作为服务器,我使用 express.js。这是我的配置:
import Routes from '../routes';
server.use((req, res) => {
const context = createServerRenderContext();
let markup = renderToString(
<ServerRouter location={req.url} context={context} > <Routes /> </ServerRouter>);
const result = context.getResult();
if (result.redirect) {
res.writeHead(301, {
Location: result.redirect.pathname,
});
res.end();
} else {
if (result.missed) {
res.writeHead(404);
markup = renderToString(
<ServerRouter location={req.url} context={context}> <Routes /> </ServerRouter>);
}
res.write(markup);
res.end();
}
});
除了官方的,我没有找到任何使用这个版本的 react-routes 进行服务器渲染的教程。 谁能帮助我我做错了什么?谢谢。
【问题讨论】:
标签: javascript node.js reactjs express react-router