我們已經熟悉React 服務端渲染(SSR)的基本步驟,現在讓我們更進一步利用 React RouterV4 實現客戶端和服務端的同構。畢竟大多數的應用都需要用到web前端路由器,所以要讓SSR能夠正常的運行,了解路由器的設置是十分有必要的
基本步驟
路由器配置
前言已經簡單的介紹了React SSR,首先我們需要添加ReactRouter4到我們的項目中
$ yarn add react-router-dom# or, using npm$ npm install react-router-dom
接著我們會描述一個簡單的場景,其中組件是靜態的且不需要去獲取外部數據。我們會在這個基礎之上去了解如何完成取到數據的服務端渲染。
在客戶端,我們只需像以前一樣將我們的的App組件通過ReactRouter的BrowserRouter來包起來。
src/index.js
import React from 'react';import ReactDOM from 'react-dom';import { BrowserRouter } from 'react-router-dom';import App from './App';ReactDOM.hydrate( <BrowserRouter> <App /> </BrowserRouter>, document.getElementById('root'));
在服務端我們將采取類似的方式,但是改為使用無狀態的 StaticRouter
server/index.js
app.get('/*', (req, res) => { const context = {}; const app = ReactDOMServer.renderToString( <StaticRouter location={req.url} context={context}> <App /> </StaticRouter> ); const indexFile = path.resolve('./build/index.html'); fs.readFile(indexFile, 'utf8', (err, data) => { if (err) { console.error('Something went wrong:', err); return res.status(500).send('Oops, better luck next time!'); } return res.send( data.replace('<div id="root"></div>', `<div id="root">${app}</div>`) ); });});app.listen(PORT, () => { console.log(`
注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
新聞熱點
疑難解答