详解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 相关文章推荐
JQuery 将元素显示在屏幕的中央的代码
Feb 27 Javascript
通过DOM脚本去设置样式信息
Sep 19 Javascript
基于jquery实现图片广告轮换效果代码
Jul 07 Javascript
Highcharts 非常实用的Javascript统计图demo示例
Jul 03 Javascript
js判断是否按下了Shift键的方法
Jan 27 Javascript
JS+Canvas绘制时钟效果
Aug 20 Javascript
关于ES6的六个小特性(二)
Feb 20 Javascript
JavaScript实现计算多边形质心的方法示例
Jan 31 Javascript
Vue 全局loading组件实例详解
May 29 Javascript
微信小程序使用npm包的方法步骤
Aug 13 Javascript
使用Vue.js中的过滤器实现幂方求值的方法
Aug 27 Javascript
Vue-cli assets SubDirectory及PublicPath区别详解
Aug 18 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
PHP4实际应用经验篇(3)
2006/10/09 PHP
第七章 php自定义函数实现代码
2011/12/30 PHP
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
2013/06/24 PHP
php实现用于删除整个目录的递归函数
2015/03/16 PHP
DOM精简教程
2006/10/03 Javascript
Javascript String.replace的妙用
2009/09/08 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
Jquery插件easyUi实现表单验证示例
2015/12/15 Javascript
jQuery.Callbacks()回调函数队列用法详解
2016/06/14 Javascript
基于jQuery实现弹幕APP
2017/02/10 Javascript
基于nodejs 的多页面爬虫实例代码
2017/05/31 NodeJs
Vue渲染函数详解
2017/09/15 Javascript
vue-quill-editor富文本编辑器简单使用方法
2018/09/21 Javascript
微信小程序中的店铺评分组件及vue中用svg实现的评分显示组件
2018/11/16 Javascript
ES6知识点整理之Proxy的应用实例详解
2019/04/16 Javascript
微信小程序bindinput与bindsubmit的区别实例分析
2019/04/17 Javascript
使用Angular material主题定义自己的组件库的配色体系
2019/09/04 Javascript
浅谈vue中组件绑定事件时是否加.native
2019/11/09 Javascript
Node.js中出现未捕获异常的处理方法
2020/06/29 Javascript
js canvas实现俄罗斯方块
2020/10/11 Javascript
[54:10]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
python基于xml parse实现解析cdatasection数据
2014/09/30 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
2019/11/07 Python
Python多继承以及MRO顺序的使用
2019/11/11 Python
Django admin组件的使用
2020/10/24 Python
Python爬取你好李焕英豆瓣短评生成词云的示例代码
2021/02/24 Python
C,C++的几个面试题小集
2013/07/13 面试题
什么是View State?
2013/01/27 面试题
运动会800米加油稿
2014/02/22 职场文书
党员十八大心得体会
2014/09/12 职场文书
写景作文评语集锦
2014/12/25 职场文书
2015年人力资源部工作总结
2015/04/30 职场文书
2016年学习贯彻十八届五中全会精神心得体会
2016/01/05 职场文书
dubbo集成zipkin获取Traceid的实现
2021/07/26 Java/Android
《乙女游戏世界对路人角色很不友好》OP主题曲无字幕动画MV公开
2022/04/05 日漫
微信小程序 WeUI扩展组件库的入门教程
2022/04/21 Javascript