详解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 相关文章推荐
学习YUI.Ext 第二天
Mar 10 Javascript
javascript 事件处理程序介绍
Jun 27 Javascript
node.js WEB开发中图片验证码的实现方法
Jun 03 Javascript
js实现点击左右按钮轮播图片效果实例
Jan 29 Javascript
Bootstrap入门书籍之(一)排版
Feb 17 Javascript
JavaScript判断变量是否为数组的方法(Array)
Feb 24 Javascript
Bootstrap警告框(Alert)插件使用方法
Mar 21 Javascript
axios 封装上传文件的请求方法
Sep 26 Javascript
微信小程序封装的HTTP请求示例【附升级版】
May 11 Javascript
vue使用一些外部插件及样式的配置代码
Nov 18 Javascript
微信小程序8种数据通信的方式小结
Feb 03 Javascript
JavaScript中跨域问题的深入理解
Mar 04 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
纯真IP数据库的应用 IP地址转化成十进制
2009/06/14 PHP
PHP遍历二维数组的代码
2011/04/22 PHP
php数字转汉字代码(算法)
2011/10/08 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
2016/09/22 PHP
laravel 5.1下php artisan migrate的使用注意事项总结
2017/06/07 PHP
JS中彻底删除JSON对象组成的数组中的元素
2020/09/22 PHP
HR vs CL BO3 第一场 2.13
2021/03/10 DOTA
jQuery源码分析-01总体架构分析
2011/11/14 Javascript
JS实现的省份级联实例代码
2013/06/24 Javascript
jquery自定义插件——window的实现【示例代码】
2016/05/06 Javascript
JQuery的常用选择器、过滤器、方法全面介绍
2016/05/25 Javascript
jQuery Ajax页面局部加载方法汇总
2016/06/02 Javascript
微信小程序 input输入框详解及简单实例
2017/01/10 Javascript
bootstrap Table服务端处理分页(后台是.net)
2017/10/19 Javascript
vue的token刷新处理的方法
2018/07/17 Javascript
详解Nuxt.js部署及踩过的坑
2018/08/07 Javascript
详解vue中localStorage的使用方法
2018/11/22 Javascript
Openlayers学习之地图比例尺控件
2020/09/28 Javascript
Python配置文件解析模块ConfigParser使用实例
2015/04/13 Python
Python读取键盘输入的2种方法
2015/06/16 Python
Python Web框架Tornado运行和部署
2020/10/19 Python
详解python函数传参是传值还是传引用
2018/01/16 Python
python解析含有重复key的json方法
2019/01/22 Python
详解【python】str与json类型转换
2019/04/29 Python
python3 selenium自动化 下拉框定位的例子
2019/08/23 Python
python检测服务器端口代码实例
2019/08/31 Python
Python生成器常见问题及解决方案
2020/03/21 Python
总经理办公室主任岗位职责
2013/11/12 职场文书
建筑专业毕业生推荐信
2013/11/21 职场文书
毕业生个人求职信范例分享
2013/12/17 职场文书
土木工程专业个人求职信
2013/12/30 职场文书
医学生职业规划范文
2014/01/05 职场文书
全国文明单位申报材料
2014/05/31 职场文书
幼儿园中班教师个人工作总结
2015/02/06 职场文书
python绘制箱型图
2021/04/27 Python
SpringBoot2零基础到精通之异常处理与web原生组件注入
2022/03/22 Java/Android