详解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 相关文章推荐
Prototype PeriodicalExecuter对象 学习
Jul 19 Javascript
用javascript获取当页面上鼠标光标位置和触发事件的对象的代码
Dec 09 Javascript
早该知道的7个JavaScript技巧
Mar 27 Javascript
关于img的href和src取变量及赋值的方法
Apr 28 Javascript
javascript的alert box在java中如何显示多行
May 18 Javascript
JavaScript定时显示广告代码分享
Mar 02 Javascript
jQuery焦点图轮播特效代码分享(3款)
Sep 05 Javascript
JavaScript判断按钮被点击的方法
Dec 13 Javascript
JavaScript ES6中CLASS的使用详解
Nov 22 Javascript
webpack4打包vue前端多页面项目
Sep 17 Javascript
基于vue+axios+lrz.js微信端图片压缩上传方法
Jun 25 Javascript
vue3使用vue-count-to组件的实现
Dec 25 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实现MySQL更新记录的代码
2008/06/07 PHP
laravel model 两表联查示例
2019/10/24 PHP
仿校内登陆框,精美,给那些很厉害但是没有设计天才的程序员
2008/11/24 Javascript
JavaScript面向对象之Prototypes和继承
2012/07/12 Javascript
Js数组的操作push,pop,shift,unshift等方法详细介绍
2012/12/28 Javascript
超棒的响应式布局jQuery插件Freetile.js
2014/11/17 Javascript
jQuery中before()方法用法实例
2014/12/25 Javascript
javascript跨域的方法汇总
2015/10/23 Javascript
jQueryUI DatePicker 添加时分秒
2016/06/04 Javascript
实现React单页应用的方法详解
2016/08/02 Javascript
vue3.0 CLI - 2.5 - 了解组件的三维
2018/09/14 Javascript
vue调试工具vue-devtools安装及使用方法
2018/11/07 Javascript
原生JS实现的放大镜特效示例【测试可用】
2018/12/08 Javascript
Vue.js实现开发购物车功能的方法详解
2019/02/22 Javascript
从0到1构建vueSSR项目之node以及vue-cli3的配置
2019/03/07 Javascript
微信JS-SDK updateAppMessageShareData安卓不能自定义分享详解
2019/03/29 Javascript
JavaScript Reflect Metadata实现详解
2019/12/12 Javascript
ElementUI Tree 树形控件的使用并给节点添加图标
2020/02/27 Javascript
在vue中使用image-webpack-loader实例
2020/11/12 Javascript
python实现简单的计时器功能函数
2015/03/14 Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
2018/05/26 Python
Python实时监控网站浏览记录实现过程详解
2020/07/14 Python
使用数据结构给女朋友写个Html5走迷宫游戏
2019/11/26 HTML / CSS
加拿大时装零售商:Influence U
2018/12/22 全球购物
Europcar意大利:汽车租赁
2019/07/07 全球购物
预订旅游活动、景点和旅游:GetYourGuide
2019/09/29 全球购物
Ariat官网:美国马靴和服装品牌
2019/12/16 全球购物
Android面试题及答案
2015/09/04 面试题
仓库主管的岗位职责
2013/12/04 职场文书
纪念九一八事变83周年国旗下讲话稿
2014/09/15 职场文书
青年文明号申报材料
2014/12/23 职场文书
公司年夜饭通知
2015/04/25 职场文书
大学生安全教育主题班会
2015/08/12 职场文书
导游词之晋城蟒河
2019/12/12 职场文书
实操Python爬取觅知网素材图片示例
2021/11/27 Python
win10系统xps文件怎么打开?win10打开xps文件的两种操作方法
2022/07/23 数码科技