详解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 this用法小结
Dec 19 Javascript
isArray()函数(JavaScript中对象类型判断的几种方法)
Nov 26 Javascript
让FireFox支持innerText的实现代码
Dec 01 Javascript
判断某个字符在一个字符串中是否存在的js代码
Feb 28 Javascript
jQuery中map()方法用法实例
Jan 06 Javascript
javascript组合使用构造函数模式和原型模式实例
Jun 04 Javascript
js自调用匿名函数的三种写法(推荐)
Aug 19 Javascript
微信小程序 页面跳转传参详解
Oct 28 Javascript
Jquery把获取到的input值转换成json
May 15 jQuery
JavaScript 值类型和引用类型的初次研究(推荐)
Jul 19 Javascript
Angular使用动态加载组件方法实现Dialog的示例
May 11 Javascript
小程序tab页无法传递参数的方法
Aug 03 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中的内存管理,PHP动态分配和释放内存
2013/06/28 PHP
php中base64_decode与base64_encode加密解密函数实例
2014/11/24 PHP
php使用curl出现Expect:100-continue解决方法
2015/03/03 PHP
php实现向javascript传递数组的方法
2015/07/27 PHP
PHP内核探索之解释器的执行过程
2015/12/22 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
2017/02/28 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
In Javascript Class, how to call the prototype method.(three method)
2007/01/09 Javascript
Javascript优化技巧(文件瘦身篇)
2008/01/28 Javascript
计算世界完全对称日的js代码,粗糙版
2011/11/04 Javascript
JS判断表单输入是否为空(示例代码)
2013/12/23 Javascript
JS实现在状态栏显示打字效果完整实例
2015/11/02 Javascript
JS简单获取日期相差天数的方法
2017/04/24 Javascript
通过js控制时间,一秒一秒自己动的实例
2017/10/25 Javascript
Vue.js自定义事件的表单输入组件方法
2018/03/08 Javascript
node结合swig渲染摸板的方法
2018/04/11 Javascript
通过vue-cli3构建一个SSR应用程序的方法
2018/09/13 Javascript
JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】
2019/02/21 Javascript
基于node简单实现RSA加解密的方法步骤
2019/03/21 Javascript
微信小程序实现聊天室
2020/08/21 Javascript
JavaScript中展开运算符及应用的实例代码
2021/01/14 Javascript
[52:44]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第一场 6.3
2018/06/04 DOTA
Python实现更改图片尺寸大小的方法(基于Pillow包)
2016/09/19 Python
Python requests库用法实例详解
2018/08/14 Python
python笔记_将循环内容在一行输出的方法
2019/08/08 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
2019/08/14 Python
图解python全局变量与局部变量相关知识
2019/11/02 Python
python数据库操作mysql:pymysql、sqlalchemy常见用法详解
2020/03/30 Python
python ssh 执行shell命令的示例
2020/09/29 Python
怎样从/向数据文件读/写结构
2014/11/23 面试题
下列程序在32位linux或unix中的结果是什么
2014/03/25 面试题
生产内勤岗位职责
2013/12/07 职场文书
工作的心得体会
2013/12/31 职场文书
书法兴趣小组活动总结
2014/07/07 职场文书
导游词之白茶谷九龙峡
2019/10/23 职场文书
基于Python实现西西成语接龙小助手
2022/08/05 Golang