详解react服务端渲染(同构)的方法


Posted in Javascript onSeptember 21, 2017

学习react也有一段时间了,使用react后首页渲染的速度与seo一直不理想。打算研究一下react神奇服务端渲染。

react服务端渲染只能使用nodejs做服务端语言实现前后端同构,在后台对react组件进行解析并生成html字符串后返回视图页面。

后台为什么可以解析react组件?因为Node.js是一个Javascript运行环境,nodejs与javascript语法基本是相同的,所以nodejs可以正常解析react组件。

一、准备动作

 1、安装nodejs与安装express

安装nodejs教程:https://3water.com/article/33086.htm

安装express教程:https://3water.com/article/36710.htm

 2、安装node-jsx(使nodejs支持jsx语法)

$ npm install node-jsx

3、安装ejs模板引擎

$ npm install ejs

4、选用ejs模板引擎解析html视图文件(配置express框架应用的app.js),需修改配置如下:

var ejs = require('ejs');
 app.engine('.html',ejs.__express);  //使用ejs模板引擎解析html视图文件
 app.set('view engine', 'html');

二、具体实现如下:

express路由:

"use strict";
var express = require('express');
var router = express.Router(); require("node-jsx").install();  //安装"node-jsx",安装该模块可以使nodejs兼容jsx语法
var React=require("react");
var Com=require('../component/test.js').Component //引入react组件
router.get('/', function(req, res, next) {
 var html=React.renderToString(Com({name:"dudeyouth"}))  //向组件传参,并使用renderToString方法解析成html字符串
 res.render("index",{component:html}); //渲染到界面
});
module.exports = router;

react组件:

"use strict";
var React=require("react");
var Component=React.Component;
class Test extends Component{
  render(){
    return <h1>{this.props.name}</h1>;
  }
}
module.exports={"Component":function(props){
  return <Test {...props}/>
}};

视图(使用了ejs模板引擎):

<html>
  <head>
    <title>DudeYouth博客</title>
    <meta charset="utf-8" />
    <link href="css/index.css" rel="external nofollow" rel="stylesheet"/>
    <link href="css/style.css" rel="external nofollow" rel="stylesheet"/>
  </head>
  <body>
  <div id="container"><%-component%></div> <!--使用ejs模板解析后的html字符串-->
  </body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
贴一个在Mozilla中常用的Javascript代码
Jan 09 Javascript
JavaScript 设计模式学习 Factory
Jul 29 Javascript
jquery中:input和input的区别分析
Jul 13 Javascript
js判断是否为ie的方法小结
Jan 13 Javascript
Javascript动画的实现原理浅析
Mar 02 Javascript
jQuery实现带延迟的二级tab切换下拉列表效果
Sep 01 Javascript
JS实现设置ff与ie元素绝对位置的方法
Mar 08 Javascript
Jquery揭秘系列:ajax原生js实现详解(推荐)
Jun 08 Javascript
浅析location.href跨窗口调用函数
Nov 22 Javascript
webpack学习--webpack经典7分钟入门教程
Jun 28 Javascript
微信小程序云开发使用方法新手初体验
May 16 Javascript
原生JS实现留言板功能
Feb 08 Javascript
详解node单线程实现高并发原理与node异步I/O
Sep 21 #Javascript
删除table表格行的实例讲解
Sep 21 #Javascript
js对象实例详解(JavaScript对象深度剖析,深度理解js对象)
Sep 21 #Javascript
使用html+js+css 实现页面轮播图效果(实例讲解)
Sep 21 #Javascript
详解JavaScript中的六种错误类型
Sep 21 #Javascript
解决Vue编译时写在style中的路径问题
Sep 21 #Javascript
使用JS实现图片轮播的实例(前后首尾相接)
Sep 21 #Javascript
You might like
php轻量级的性能分析工具xhprof的安装使用
2015/08/12 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
YII2.0框架行为(Behavior)深入详解
2019/07/26 PHP
javascript 写类方式之六
2009/07/05 Javascript
原生js实现查找/添加/删除/指定元素的class
2013/04/12 Javascript
js判断滚动条是否已到页面最底部或顶部实例
2014/11/20 Javascript
javascript实现仿IE顶部的可关闭警告条
2015/05/05 Javascript
基于jQuery.Hz2Py.js插件实现的汉字转拼音特效
2015/05/07 Javascript
JavaScript中数据结构与算法(五):经典KMP算法
2015/06/19 Javascript
jquery+php随机生成红包金额数量代码分享
2015/08/27 Javascript
jQuery实现div拖拽效果实例分析
2016/02/20 Javascript
基于node.js之调试器详解
2017/08/22 Javascript
基于vue展开收起动画的示例代码
2018/07/05 Javascript
最简单的JS实现json转csv的方法
2019/01/10 Javascript
原生js实现五子棋游戏
2020/05/28 Javascript
基于vue和bootstrap实现简单留言板功能
2020/05/30 Javascript
Vue CLI4 Vue.config.js标准配置(最全注释)
2020/06/05 Javascript
js+css3实现炫酷时钟
2020/08/18 Javascript
vue 将多个过滤器封装到一个文件中的代码详解
2020/09/05 Javascript
[28:48]《真视界》- 2017年国际邀请赛
2017/09/27 DOTA
python网络编程学习笔记(九):数据库客户端 DB-API
2014/06/09 Python
简单介绍Python中的RSS处理
2015/04/13 Python
Python 爬虫模拟登陆知乎
2016/09/23 Python
Python使用MD5加密算法对字符串进行加密操作示例
2018/03/30 Python
对Tensorflow中权值和feature map的可视化详解
2018/06/14 Python
Python安装selenium包详细过程
2019/07/23 Python
python对一个数向上取整的实例方法
2020/06/18 Python
python调用百度API实现人脸识别
2020/11/17 Python
Skyscanner加拿大:全球旅行搜索平台
2018/11/19 全球购物
小学教师的个人自我鉴定
2013/10/26 职场文书
团委竞选演讲稿
2014/04/24 职场文书
教师国庆节演讲稿范文2014
2014/09/21 职场文书
秦兵马俑导游词
2015/02/02 职场文书
大学生读书笔记大全
2015/07/01 职场文书
CSS中em的正确打开方式详解
2021/04/08 HTML / CSS
面试必问:圣杯布局和双飞翼布局的区别
2021/05/13 HTML / CSS