服务器端反应路由器不能渲染我的路由

时间:2015-09-25 19:43:27

标签: node.js express reactjs react-router

我使用版本1.0.0-rc1并且我的匹配功能无法正确呈现我的路线。

这是我的服务器

import express from 'express';
import React from 'react';
import createLocation from 'history/lib/createLocation'
import Router, { match, RoutingContext } from 'react-router';
import createRoutes from './create-routes';

const app = express();
const routes = createRoutes();

app.use((req, res) => {
  let location = createLocation(req.url);

  match({ routes, location }, (error, redirectLocation, renderProps) => {
    if (redirectLocation)
      res.status(301).redirect(redirectLocation.pathname + redirectLocation.search)
    else if (error)
      res.status(500).send(error.message)
    else if (renderProps == null)
      res.status(404).send('Not found')
    else
      res.send(React.renderToString(<RoutingContext {...renderProps}/>))
  });
});

export default app;

这是我的路线

import React from 'react';
import { Route } from 'react-router';
import Application from './components/Application.react';
import Home from './components/Home.react';

export default function() {
  return (
    <Route path="/" component={Application}>
      <Route path="home" component={Home} />
    </Route>
  );
}

我在这做错了什么?当我要求/ home时,它应该呈现<h1>Home</h1>而不是<h1>Application</h1>。就这么简单。

我的基础是https://github.com/rackt/react-router/blob/master/docs/guides/advanced/ServerRendering.md

谢谢

1 个答案:

答案 0 :(得分:1)

您正在使用子路由。这意味着,当您首先转到“/ home”时,将呈现Application,然后注入子Home并通过Application Component内的this.props.children提供。 有关简单示例,请参阅here

试试这个(不是嵌套的):

<Route path="/" component={Application}>
<Route path="/home" component={Home} />

如果要在Home组件周围渲染Application组件,请使用

render() {
    return (
        <div>
            <h1>Application</h1>
            { this.props.children }
        </div>
    );
}