【发布时间】:2015-09-06 21:10:57
【问题描述】:
我的主页路由 ( / ) 的初始服务器渲染工作正常。
此外,随后的客户端导航到 ( /#/page2 ) 工作正常。
但是,如果我直接从地址栏加载 /#/page2,服务器渲染的主页首先会加载到浏览器中,然后明显地转换到 /#/page2,这不是我想要的。我只想显示 /#/page2 而无需先刷新主页。
发生的事情是节点正在为 / 的请求提供主页,然后当响应到达客户端时,客户端正在运行 /#/page2 的路由处理程序。两者的行为都正确。但这不是我想要的。
如何避免这种行为?
我认为我需要一种让服务器和客户端都知道不同路由并且都能够处理它们(同构)的方法,但是,服务器不知道 url 的片段部分.
其他人有这个问题吗?
这个问题不是特定的反应。它是特定于 SSR 的深层链接。
我的节点路由器处理“/”如下
router.get('/', function(req, res) {
var React = require('react');
var Router = require('react-router');
var Routes = require("../app/clapi-routes.jsx");
var router = Router.create({location: req.url, routes: Routes});
router.run(function(Handler, state) {
var html = React.renderToString(<Handler/>);
return res.render('index.ejs', {html:html});
})
});
index.ejs 只是:
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="/css/json-inspector.css"/>
</head>
<body style="margin:0">
<%- html %>
<script src="/build/bundle.js"></script>
</body>
</html>
【问题讨论】:
-
你能写一个小的 jsfiddle/plnkr 来说明你的问题吗?
-
@harshtuna 如何为节点服务器代码执行此操作?
-
@JoeHanink code.runnable.com/new
-
@JoeHanink 错过了 SSR。也许 fork 这个github.com/mhart/react-server-example 用于演示?
-
@jantimon 太酷了。如果需要,我可以复制我的项目。现在,这是该行为的屏幕记录:dl.dropboxusercontent.com/u/363598/Vids/clapi-ssr.gif
标签: javascript reactjs single-page-application isomorphic-javascript