標籤:
學習react也有一段時間了,使用react後首頁渲染的速度與seo一直不理想。打算研究一下react神奇服務端渲染。
react服務端渲染只能使用nodejs做服務端語言實現前後端同構,在後台對react組件進行解析並產生html字串後返回視圖頁面。
後台為什麼可以解析react組件?因為Node.js是一個Javascript運行環境,nodejs與javascript文法基本是相同的,所以nodejs可以正常解析react組件。
一、準備動作
1、安裝nodejs與安裝express
安裝nodejs教程:http://www.cnblogs.com/pigtail/archive/2013/01/08/2850486.html
安裝express教程:http://www.expressjs.com.cn/starter/installing.html
2、安裝node-jsx(使nodejs支援jsx文法)
$ npm install node-jsx
3、安裝ejs模板引擎
$ npm install ejs
4、選用ejs模板引擎解析html視圖檔案(配置express架構應用的app.js),需修改配置如下:
1 var ejs = require(‘ejs‘);2 app.engine(‘.html‘,ejs.__express); //使用ejs模板引擎解析html視圖檔案3 app.set(‘view engine‘, ‘html‘);
二、具體實現如下:
express路由:
1 "use strict"; 2 var express = require(‘express‘); 3 var router = express.Router(); 5 require("node-jsx").install(); //安裝"node-jsx",安裝該模組可以使nodejs相容jsx文法 6 var React=require("react"); 7 var Com=require(‘../component/test.js‘).Component //引入react組件 8 router.get(‘/‘, function(req, res, next) { 9 var html=React.renderToString(Com({name:"dudeyouth"})) //向組件傳參,並使用renderToString方法解析成html字串10 res.render("index",{component:html}); //渲染到介面11 });12 module.exports = router;
react組件:
1 "use strict"; 2 var React=require("react"); 3 var Component=React.Component; 4 class Test extends Component{ 5 render(){ 6 return <h1>{this.props.name}</h1>; 7 } 8 } 9 module.exports={"Component":function(props){10 return <Test {...props}/>11 }};
視圖(使用了ejs模板引擎):
1 <html> 2 <head> 3 <title>DudeYouth部落格</title> 4 <meta charset="utf-8" /> 5 <link href="css/index.css" rel="stylesheet"/> 6 <link href="css/style.css" rel="stylesheet"/> 7 </head> 8 <body> 9 <div id="container"><%-component%></div> <!--使用ejs模板解析後的html字串-->10 </body>11 </html>
react服務端渲染(同構)