设为首页 收藏本站
查看: 778|回复: 0

[经验分享] react服务端渲染(同构)

[复制链接]

尚未签到

发表于 2017-2-23 08:48:55 | 显示全部楼层 |阅读模式
  学习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(); 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>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-345913-1-1.html 上篇帖子: 趁热打铁学node 下篇帖子: 搭建WebRtc环境
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表