我正在处理最近的反应。我正在使用服务器渲染和react-router,但它只能渲染反应组件中的HTML,并且我需要通过中的ajax获取初始数据。我可以使用React中的数据进行服务器渲染吗?
问题在于某些页面/组件,他们需要初始数据来呈现。因此,如果用户直接访问这样的页面(通过输入url或刷新),页面会中断,因为服务器无法在没有初始数据的情况下渲染它。
我想我可以从数据库中获取数据并在服务器中呈现时将其插入到模板中?就像经典的前端模板或PHP所做的一样。
如果没办法,渲染首页数据的最佳做法是什么?
现在我的服务器代码是这样的:
router.get('*', function(req, res) {
console.log('GET ADMIN');
match({
routes: appRoutes,
location: req.originalUrl
}, (error, redirectLocation, renderProps) => {
if (error) {
res.status(500)
.send(error.message);
} else if (redirectLocation) {
res.status(302)
.redirect(redirectLocation.pathname + redirectLocation.search);
} else if (renderProps) {
var content = renderToString(<RoutingContext {...renderProps}/>);
var html = swig.renderFile('src/client/admin.html', {
content: content
});
res.status(200)
.send(html);
} else {
res.status(404)
.send('Not found');
}
});
});
它被称为同构或通用渲染,我做了一个简单的例子没有通量在这里 - https://github.com/DominicTobias/universal-react/。我建议你谷歌,因为有很多不同的方法。这不是最简单的主题。 –
@DominicTobias Thx。我已阅读关于同构应用程序的一些教程。我学到的是如何在没有数据的情况下呈现HTML。你能检查我刚刚编辑的帖子吗?所以你的意思是我可以使用实时数据渲染页面(从数据库中获取)?这是一个好消息。我现在要读你的链接。 –