详解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系列(3) 全面解析Module模式
Jan 15 Javascript
Jquery中children与find之间的区别详细解析
Nov 29 Javascript
Javascript实现单张图片浏览
Dec 18 Javascript
js中日期的加减法
May 06 Javascript
JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
Nov 24 Javascript
使用微信内置浏览器点击下拉框出现页面乱跳转现象(iphone),该怎么办
Jan 04 Javascript
基于JSONP原理解析(推荐)
Dec 04 Javascript
vue element项目引入icon图标的方法
Jun 06 Javascript
对vue中v-if的常见使用方法详解
Sep 28 Javascript
JS设置自定义快捷键并实现图片上下左右移动
Oct 17 Javascript
Element-ui el-tree新增和删除节点后如何刷新tree的实例
Aug 31 Javascript
vue a标签点击实现赋值方式
Sep 07 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
颠覆常识!无色透明的咖啡诞生了(中日双语)
2021/03/03 咖啡文化
php 论坛采集程序 模拟登陆,抓取页面 实现代码
2009/07/09 PHP
php使用Cookie控制访问授权的方法
2015/01/21 PHP
laravel邮件发送的实现代码示例
2020/01/31 PHP
javascript之学会吝啬 精简代码
2010/04/25 Javascript
jQuery帮助之筛选查找 children([expr])
2011/01/31 Javascript
新鲜出炉的js tips提示效果
2011/04/03 Javascript
JS继承 笔记
2011/07/13 Javascript
一个可以增加和删除行的table并可编辑表格中内容
2014/06/16 Javascript
javascript实现数独解法
2015/03/14 Javascript
jQuery提示插件alertify使用指南
2015/04/21 Javascript
Bootstrap编写一个同时适用于PC、平板、手机的登陆页面
2016/06/30 Javascript
浅析Javascript ES6新增值比较函数Object.is
2016/08/24 Javascript
基于Vue2.0+ElementUI实现表格翻页功能
2017/10/23 Javascript
详解vue 图片上传功能
2019/04/30 Javascript
vue2.0 实现富文本编辑器功能
2019/05/26 Javascript
js模拟实现烟花特效
2020/03/10 Javascript
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
2020/05/29 jQuery
es5 类与es6中class的区别小结
2020/11/09 Javascript
vue3使用vue-count-to组件的实现
2020/12/25 Vue.js
Python实现的数据结构与算法之基本搜索详解
2015/04/22 Python
Python 多进程和数据传递的理解
2017/10/09 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
2020/01/02 Python
详解Pycharm出现out of memory的终极解决方法
2020/03/03 Python
使用OpenCV对车道进行实时检测的实现示例代码
2020/06/19 Python
分布式全文检索引擎ElasticSearch原理及使用实例
2020/11/14 Python
html5的input的required使用中遇到的问题及解决方法
2018/04/24 HTML / CSS
如何查找网页漏洞
2016/06/22 面试题
工地安全生产标语
2014/06/06 职场文书
红色经典观后感
2015/06/18 职场文书
2016年教师党员承诺书范文
2016/03/24 职场文书
python函数指定默认值的实例讲解
2021/03/29 Python
解决python存数据库速度太慢的问题
2021/04/23 Python
python Django框架快速入门教程(后台管理)
2021/07/21 Python
Python 中的 copy()和deepcopy()
2021/11/07 Python
Kubernetes中Deployment的升级与回滚
2022/04/01 Servers