详解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基本编码模式小结
May 23 Javascript
js实现二代身份证号码验证详解
Nov 20 Javascript
在ASP.NET MVC项目中使用RequireJS库的用法示例
Feb 15 Javascript
举例说明JavaScript中的实例对象与原型对象
Mar 11 Javascript
轻松掌握jQuery中wrap()与unwrap()函数的用法
May 24 Javascript
基于d3.js实现实时刷新的折线图
Aug 03 Javascript
关于webuploader插件使用过程遇到的小问题
Nov 07 Javascript
微信小程序 轮播图swiper详解及实例(源码下载)
Jan 11 Javascript
jQuery Form插件使用详解_动力节点Java学院整理
Jul 17 jQuery
打字效果动画的4种实现方法(超简单)
Oct 18 Javascript
es6在react中的应用代码解析
Nov 08 Javascript
重学JS 系列:聊聊继承(推荐)
Apr 11 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中路径问题的解决方案
2006/10/09 PHP
php 使用array函数实现分页
2015/02/13 PHP
php实现发送微信模板消息的方法
2015/03/07 PHP
php使用gettimeofday函数返回当前时间并存放在关联数组里
2015/03/19 PHP
php实现微信扫码支付
2017/03/26 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
2018/08/20 PHP
使用PHPUnit进行单元测试并生成代码覆盖率报告的方法
2019/03/08 PHP
锋利的jQuery jQuery中的DOM操作
2010/03/21 Javascript
关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法
2010/11/30 Javascript
jQuery随机切换图片的小例子
2013/04/18 Javascript
JQuery EasyUI Layout 在from布局自适应窗口大小的实现方法
2016/05/28 Javascript
JS使用cookie设置样式的方法
2016/06/30 Javascript
浅谈js算法和流程控制
2016/12/29 Javascript
常用jQuery选择器汇总
2017/02/02 Javascript
jQuery Validate 无法验证 chosen-select元素的解决方法
2017/05/17 jQuery
Vue-cli3项目配置Vue.config.js实战记录
2018/07/29 Javascript
layui 优化button按钮和弹出框的方法
2018/08/15 Javascript
用npm安装vue和vue-cli,并使用webpack创建项目的方法
2018/09/28 Javascript
vue 移动端注入骨架屏的配置方法
2019/06/25 Javascript
Vue插槽_特殊特性slot,slot-scope与指令v-slot说明
2020/09/04 Javascript
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
Python 中的range(),以及列表切片方法
2018/07/02 Python
python使用协程实现并发操作的方法详解
2019/12/27 Python
pycharm设置当前工作目录的操作(working directory)
2020/02/14 Python
Python正则表达式学习小例子
2020/03/03 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
2020/03/06 Python
Python+OpenCV图像处理——实现直线检测
2020/10/23 Python
Html5 语法与规则简要概述
2014/07/29 HTML / CSS
HTML5添加禁止缩放功能
2017/11/03 HTML / CSS
日本土著品牌,综合型购物网站:Cecile
2016/08/23 全球购物
人力资源经理的岗位职责
2014/03/02 职场文书
房屋继承公证书
2014/04/10 职场文书
临床护理求职信
2014/04/26 职场文书
新生儿未入户证明
2015/06/23 职场文书
2015大学迎新晚会策划书
2015/07/16 职场文书
HDFS免重启挂载新磁盘
2022/04/06 Servers