如何在SSR中获取react-router-redux重定向URL

时间:2018-01-18 11:49:35

标签: redux history.js react-router-redux

我使用[^#]+并且我找不到解决方法来捕获服务器端渲染上的react-router-redux@5.0.0-alpha.9网址。

用例:

  • 未识别的用户尝试访问安全路由,<Redirect>将用户发送到登录路由。
  • 已登录用户尝试访问登录表单,<Redirect>将用户发送到主私人路由。

现在重定向正在浏览器中发生,但提供一种捕获<Redirect> URL并从服务器发送正确重定向的方法会很棒。

我希望做一些与<Redirect>解决方案类似的事情(使用<StaticRouter>context一起使用)

<ConnectedRouter>

我也试过了import { ConnectedRouter } from 'react-router-redux'; const context = {}; const app = renderToString( <Provider store={store}> <ConnectedRouter history={history} isSSR context={context}> <Application /> </ConnectedRouter> </Provider> ); if (context.url) { const HTTP_FOUND = 302; res.writeHead(HTTP_FOUND, { Location: context.url }); res.end(); } 并且没有触发位置更改。

history.listen

1 个答案:

答案 0 :(得分:0)

history.listen未被触发,因为<Redirect>组件在SSR期间和ConnectedRouter期间在服务器上使用时,由于ConnectedRouter未提供所需内容而无法执行任何操作staticContext

有关此问题的讨论,请查看https://github.com/ReactTraining/react-router/pull/5323

似乎正确的解决方案是在SSR期间不使用ConnectedRouter,而是使用StaticRouter并调度您自己的初始LOCATION_CHANGE操作以使商店与当前位置。

有关此问题的详细评论,请参阅https://github.com/ReactTraining/react-router/issues/5333#issuecomment-315737132