详解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 相关文章推荐
DEFER怎么用?
Jul 01 Javascript
该如何加载google-analytics(或其他第三方)的JS
May 13 Javascript
IE6中链接A的href为javascript协议时不在当前页面跳转
Jun 05 Javascript
ANGULARJS中使用JQUERY分页控件
Sep 16 Javascript
js实现图片360度旋转
Jan 22 Javascript
JavaScript瀑布流布局实现代码
May 06 Javascript
11行JS代码制作二维码生成功能
Mar 09 Javascript
javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
Aug 01 Javascript
setTimeout与setInterval的区别浅析
Mar 23 Javascript
vue使用混入定义全局变量、函数、筛选器的实例代码
Jul 29 Javascript
vue点击当前路由高亮小案例
Sep 26 Javascript
vue+elementUI动态生成面包屑导航教程
Nov 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
PHP,ASP.JAVA,JAVA代码格式化工具整理
2010/06/15 PHP
PHP+iframe模拟Ajax上传文件功能示例
2019/07/02 PHP
基于laravel缓冲cache的用法详解
2019/10/23 PHP
javaScript Array(数组)相关方法简述
2009/07/25 Javascript
关于jQuery中的end()使用方法
2011/07/10 Javascript
关于JQuery($.load)事件的用法和分析
2013/04/09 Javascript
HTML页面滚动时获取离页面顶部的距离2种实现方法
2013/09/05 Javascript
动态的创建一个元素createElement及删除一个元素
2014/01/24 Javascript
Javascript与jQuery方法的隐藏与显示
2015/01/19 Javascript
JavaScript判断浏览器类型的方法
2015/02/10 Javascript
JS+CSS实现可拖拽的漂亮圆角特效弹出层完整实例
2015/02/13 Javascript
纯JS代码实现一键分享功能
2016/04/20 Javascript
angularjs定时任务的设置与清除示例
2017/06/02 Javascript
解读ES6中class关键字
2017/11/20 Javascript
jquery-file-upload 文件上传带进度条效果
2017/11/21 jQuery
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
2018/12/13 Javascript
Js参数RSA加密传输之jsencrypt.js的使用
2020/02/07 Javascript
vue实现全屏滚动效果(非fullpage.js)
2020/03/07 Javascript
详解JavaScript作用域 闭包
2020/07/29 Javascript
python实现去除下载电影和电视剧文件名中的多余字符的方法
2014/09/23 Python
Django中更新多个对象数据与删除对象的方法
2015/07/17 Python
numpy数组拼接简单示例
2017/12/15 Python
python 读文件,然后转化为矩阵的实例
2018/04/23 Python
TensorFlow实现iris数据集线性回归
2018/09/07 Python
Python图像处理之gif动态图的解析与合成操作详解
2018/12/30 Python
python删除指定列或多列单个或多个内容实例
2020/06/28 Python
详解CSS3弹性伸缩盒
2020/09/21 HTML / CSS
爱尔兰家电数码商城:Currys PC World爱尔兰
2016/07/23 全球购物
美国家喻户晓的保健品品牌:Vitamin World(维他命世界)
2016/08/19 全球购物
科茨沃尔德家居商店:Scotts of Stow
2018/06/29 全球购物
教育局长自荐信范文
2013/12/22 职场文书
《记承天寺夜游》教学反思
2014/02/16 职场文书
公司领导班子对照检查存在问题整改措施
2014/10/02 职场文书
幼儿园教师求职信
2015/03/20 职场文书
Redis Cluster 字段模糊匹配及删除
2021/05/27 Redis
SQL Server中常用截取字符串函数介绍
2022/03/16 SQL Server