详解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 相关文章推荐
使用Javascript和DOM Interfaces来处理HTML
Oct 09 Javascript
JavaScript 异步调用框架 (Part 4 - 链式调用)
Aug 04 Javascript
Android中资源文件(非代码部分)的使用概览
Dec 18 Javascript
如何使用jquery动态加载js,css文件实现代码
Apr 03 Javascript
js中利用tagname和id获取元素的方法
Jan 03 Javascript
jQuery EasyUI框架中的Datagrid数据表格组件结构详解
Jun 09 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
Jul 11 Javascript
老生常谈combobox和combotree模糊查询
Apr 17 Javascript
详解webpack+gulp实现自动构建部署
Jun 29 Javascript
Angular4编程之表单响应功能示例
Dec 13 Javascript
jQuery选择器之层次选择器用法实例分析
Feb 19 jQuery
mpvue开发音频类小程序踩坑和建议详解
Mar 12 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中使用与Perl兼容的正则表达式
2006/11/26 PHP
教你如何开启shopnc b2b2c 伪静态
2014/10/21 PHP
ThinkPHP在Cli模式下使用模板引擎的方法
2015/09/25 PHP
PHP APP微信提现接口代码
2018/09/30 PHP
PHP进阶学习之命名空间基本用法分析
2019/06/18 PHP
学习YUI.Ext 第四天--对话框Dialog的使用
2007/03/10 Javascript
jquery实现微博文字输入框 输入时显示输入字数 效果实现
2013/07/12 Javascript
jQuery横向擦除焦点图特效代码分享
2015/09/06 Javascript
AngularJS使用angular.bootstrap完成模块手动加载的方法分析
2017/01/19 Javascript
详谈ES6中的迭代器(Iterator)和生成器(Generator)
2017/07/31 Javascript
关于JavaScript语句后面的分号问题
2017/12/07 Javascript
原生js实现移动端Touch轮播图的方法步骤
2019/01/03 Javascript
Vue学习之常用指令实例详解
2020/01/06 Javascript
简单的Python的curses库使用教程
2015/04/11 Python
Python随机生成均匀分布在三角形内或者任意多边形内的点
2017/12/14 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
2019/01/29 Python
Python如何爬取实时变化的WebSocket数据的方法
2019/03/09 Python
Python中super函数用法实例分析
2019/03/18 Python
Python使用pyautocad+openpyxl处理cad文件示例
2019/07/11 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
2019/09/24 Python
python 两个数据库postgresql对比
2019/10/21 Python
Python正则表达式学习小例子
2020/03/03 Python
python 如何实现遗传算法
2020/09/22 Python
css3的transition属性详解
2014/12/15 HTML / CSS
深入探究HTML5的History API
2015/07/09 HTML / CSS
天巡全球:Skyscanner Global
2017/06/20 全球购物
澳大利亚家居用品零售商:Harris Scarfe
2020/10/10 全球购物
《假如》教学反思
2014/04/17 职场文书
优秀驾驶员先进事迹材料
2014/05/04 职场文书
营销团队口号
2014/06/06 职场文书
音乐之声音乐广播稿
2014/09/10 职场文书
2014年教师教学工作总结
2014/11/08 职场文书
2015年党务公开工作总结
2015/05/19 职场文书
Python 快速验证代理IP是否有效的方法实现
2021/07/15 Python
MySQL常见优化方案汇总
2022/01/18 MySQL
Oracle中日期的使用方法实例
2022/07/07 Oracle