gpt4 book ai didi

javascript - 如何使用 react-router 2 作为 expressjs 的服务器端路由?

转载 作者:行者123 更新时间:2023-11-29 19:15:03 25 4
gpt4 key购买 nike

Server side rendering with react-router 该文档不足以理解如何使用 react-router 2 在服务器端呈现具有不同类型的 http 请求(如 get、post、put 等)的 React 组件。

最佳答案

详细写出如何在服务器端渲染 react 和 react-router 应用程序可能是一个很大的话题。

我假设您是有经验的用户并且知道如何使用 expressjs 以及如何创建 React 和 React-Router 应用。

当您渲染服务器端时,您可以创建单独的服务器路由器来映射每个前端路由,或者创建一个将采用所有 url 的路由器。

后一种情况只需要一个服务器路由器。在你的服务器路由器底部的某个地方(在错误路由之前)写:

app.use('/*', function(req, res){ ... });

此路由将捕获所有 url。

首先我们需要关于url的信息。我们不需要有关协议(protocol)或域的信息,因此我们只需要:

var url = req.originalUrl;

关于我们从中获取的方法(POST、GET、PUT、DELETE)的信息:

var method = req. method

如果你愿意,你可以制作单独的路线,你会:

app.post('/something', function(req, res) {...});
app.get('/something', function(req, res) {...});

没关系。

第二,我们不为 react-router 使用浏览器历史记录!我们必须使用内存历史。

你的历史对象:

var history = createMemoryHistory(req.originalUrl || '/');

然后将历史对象传递给路由器。

我喜欢创建我的根组件以接受作为参数历史对象。当我在前端使用它时,我传递浏览器历史记录,当我在服务器渲染中使用它时,我传递内存历史记录。

下面是一个非常简单的例子,服务器端渲染路由的样子(我也使用了 ejs 模板):

router.use('/*', function(req, res){
var history = createMemoryHistory(req.originalUrl || '/');
var initialState = {};
//do something with initialState according to url and request method
var staticHTML = ReactDOMServer.renderToString(
React.createFactory(App)({
history,
initialState
})
);

res.render('index', {
staticHTML,
initialState: JSON.stringify(initialState)
});
});

在此示例中,您需要根据用户 url 和请求方法填充 initState。您的应用应该开始使用该初始化数据。

如果您使用 redux,服务器端渲染也可以像 charm 一样工作。因为我们有一个 store 和一个 init 状态对象。然后,您可以在渲染期间传递任何基本值。例如,当您渲染对象列表时,您将它放在前端并传递给初始状态,然后进行渲染。然后呈现的页面将具有值。

我正在研究 react+react-router+redux+redux-react-router+expressjs 示例,它还没有完全准备好但可以工作,你可以看到我是如何解决服务器渲染的:

https://github.com/uhlryk/my-express-react-seed

关于javascript - 如何使用 react-router 2 作为 expressjs 的服务器端路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35970392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com