我正在處理最近的反應。我正在使用服務器渲染和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。你能檢查我剛剛編輯的帖子嗎?所以你的意思是我可以使用實時數據渲染頁面(從數據庫中獲取)?這是一個好消息。我現在要讀你的鏈接。 –