【发布时间】:2018-05-03 04:52:04
【问题描述】:
已经有效的方法:
主页上的服务器端渲染。
什么不起作用:
通过单击<Link> 标签转到其他路由,从主页在其他其他路由上进行服务器端渲染。好吧,有点不工作,同时工作。
工作方式?:
如果您在单击<Link> 后查看页面的页面源,您将看到服务器端渲染获取的所有初始数据,但是它没有存储在客户端的reducer 中。
解决方案?:
通过大量时间和研究和询问,我得出的结论是,问题出在服务器端的StaticRouter。特别是 location 道具。此道具通过req.path 或req.url,我都尝试过并得到相同的结果。我将以req.path 为例。
让我们看看这里的这段代码:
console.log(req.path);
const content = renderToString(
<Provider store={store}>
<StaticRouter location={req.path} context={context}>
<div>{renderRoutes(routes)}</div>
</StaticRouter>
</Provider>
);
在这里,我们在将 req.path 传递给 location 属性之前注销它。这就是我认为告诉路由器将正确的数据加载到存储中并将其发送到客户端减速器的原因。
我将逐步说明应用流程发生的情况。
在/ 路由加载console.log(req.path) 在服务器端显示此:
/
但是,例如,如果我单击 <Link to="/users">Users</Link>,控制台日志什么也不做。
现在我可以从这里刷新页面,然后它就可以工作了,数据已加载,console.log(req.path) 显示:
/users
我可以做的其他事情是直接转到localhost:3000/users 的路线,console.log(req.path) 将显示/users 并且数据正确加载。但这两种方式都不是真正的解决方案,只是因为它们以某种方式“绕过”了<Link> 标签。
问题是什么???:
我想知道如何使用<Link> 标签来更改req.path 或req.url,因为这是我所看到的问题,或者是否有可能。这样StaticRouter 中的location 属性会在<Link> 被点击时改变。
【问题讨论】:
标签: reactjs express redux server-side-rendering react-router-dom