详解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高级程序设计 读书笔记之九 本地对象Array
Feb 27 Javascript
跨浏览器的事件对象介绍
Jun 27 Javascript
JS中不为人知的五种声明Number的方式简要概述
Feb 22 Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
Jun 24 Javascript
JavaScript中具名函数的多种调用方式总结
Nov 08 Javascript
JavaScript中的闭包介绍
Mar 15 Javascript
基于JavaScript实现定时跳转到指定页面
Jan 01 Javascript
Bootstrap Table从服务器加载数据进行显示的实现方法
Sep 29 Javascript
vue2 mint-ui loadmore实现下拉刷新,上拉更多功能
Mar 21 Javascript
vue实现绑定事件的方法实例代码详解
Jun 20 Javascript
如何优雅地取消 JavaScript 异步任务
Mar 22 Javascript
jenkins自动构建发布vue项目的方法步骤
Jan 04 Vue.js
详解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中for循环语句的几种变型
2006/11/26 PHP
解析php中die(),exit(),return的区别
2013/06/20 PHP
一个显示效果非常不错的PHP错误、异常处理类
2014/03/21 PHP
基于jquery的使ListNav兼容中文首字拼音排序的实现代码
2011/07/10 Javascript
jquery实现的下拉和收缩效果示例
2014/08/21 Javascript
理解javascript中的回调函数(callback)
2014/09/02 Javascript
angular.element方法汇总
2015/01/07 Javascript
JS实现点击文字对应DIV层不停闪动效果的方法
2015/03/02 Javascript
JS中生成随机数的用法及相关函数
2016/01/09 Javascript
JS正则表达式之非捕获分组用法实例分析
2016/12/28 Javascript
利用js的闭包原理做对象封装及调用方法
2017/04/07 Javascript
js 获取html5的data属性实现方法
2017/07/28 Javascript
JS自定义函数实现时间戳转换成date的方法示例
2017/08/27 Javascript
JS实现常见的查找、排序、去重算法示例
2018/05/21 Javascript
解决vue-cli3 使用子目录部署问题
2018/07/19 Javascript
jQuery实现的简单手风琴效果示例
2018/08/29 jQuery
vue路由插件之vue-route
2019/06/13 Javascript
js中forEach,for in,for of循环的用法示例小结
2020/03/14 Javascript
[12:29]2018国际邀请赛 开幕秀
2018/08/22 DOTA
Python字符串处理实例详解
2017/05/18 Python
python利用lxml读写xml格式的文件
2017/08/10 Python
使用python接入微信聊天机器人
2020/03/31 Python
python简单实现插入排序实例代码
2020/12/16 Python
突袭HTML5之Javascript API扩展4—拖拽(Drag/Drop)概述
2013/01/31 HTML / CSS
浅谈关于html5中图片抛物线运动的一些心得
2018/01/09 HTML / CSS
Charles & Keith欧盟:新加坡时尚品牌
2019/08/01 全球购物
澳大利亚家居用品零售商:Harris Scarfe
2020/10/10 全球购物
2014年公务员思想汇报范文:全心全意为人民服务
2014/03/06 职场文书
男女朋友协议书
2014/04/23 职场文书
三好学生先进事迹材料
2014/08/28 职场文书
上课睡觉检讨书300字
2014/11/18 职场文书
财政局个人年终总结
2015/03/03 职场文书
党员承诺书格式范文
2015/04/28 职场文书
纪录片信仰观后感
2015/06/08 职场文书
浅谈移动端中的视口(viewport)的具体使用
2021/04/13 HTML / CSS
HTML实现仿Windows桌面主题特效的实现
2022/06/28 HTML / CSS