简单的React SSR服务器渲染实现


Posted in Javascript onDecember 11, 2018

为什么要SSR

单页应用将UI层和内容都由javascript来渲染,搜索引擎或网页爬虫需要完成的HTML结构,因此单页应用如果只在客户端渲染,不利于SEO,此外尽管我们可以通过按需加载的形式来减少首页加载的js,但是通过js来渲染DOM的时候还是会有一定的时间延迟。

0.前言

服务端渲染在项目中不是刚需的东西,但有的时候也是需要做一个服务端渲染,项目要做服务端渲染当然是有很多好处的

  • 首屏加载快,相比SPA单页应用还要有优势。
  • SEO 优化 利于爬虫,爬取数据。

1. 简介

服务端渲染是指页面的渲染和生成是在服务端完成的,并将渲染好的页面返回客户端。

2. 安装

安装的时候版本都是最新版,而新的版本很多方法和API有弃用和更新的,导致最后项目无法运行。

npm install --save-dev koa
npm install --save-dev babel-core
npm install --save-dev babel-polyfill
npm install --save-dev babel-preset-latest-node
npm install --save-dev babel-preset-stage-2
npm install --save-dev babel-preset-react
# or
yarn add -dev koa
yarn add -dev babel-core
yarn add -dev babel-polyfill
yarn add -dev babel-preset-latest-node
yarn add -dev babel-preset-stage-2
yarn add -dev babel-preset-react

3.配置

安装完成后写一个启动文件 start.js:

// start.js
require('babel-core/register')({
  ignore: [/node_modules/],
  presets: [
    'stage-2',
    'react',
    [
      "latest-node",
      { "target": "current" }
    ]
  ]
});

require('babel-polyfill');
require('./../index');

在写一个入口文件index.js

// index.js
import Koa from 'koa';
import React from 'react';
import ReactDOMServer from 'react-dom/server';

const { renderToString } = ReactDOMServer;

const app = new Koa();

app.use(ctx => {
  ctx.body = renderToString(
    <div>
      <h1>Hello,World</h1>
    </div>
  );
});

app.listen(3000, () => {
  console.log('server run in 3000');
});

执行npm start启动项目

"scripts": {
  "start": "node ./src/start.js"
 },

4.结果

打开浏览器查看http://localhost:3000/ 

简单的React SSR服务器渲染实现

5.结束语

到这里就完成了一个简单的 React SSR,当然实现React服务端渲染还可以用别的方式,比如Next.js。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript iframe编程相关代码
Dec 28 Javascript
JavaScript插件化开发教程(六)
Feb 01 Javascript
js立即执行函数: (function ( ){})( ) 与 (function ( ){}( )) 有什么区别?
Nov 18 Javascript
jQuery表格插件datatables用法详解
Nov 23 Javascript
学习Node.js模块机制
Oct 17 Javascript
给easyui的datebox控件添加清空按钮的实现方法
Nov 09 Javascript
解决ajax不能访问本地文件问题(利用js跨域原理)
Jan 24 Javascript
javascript实现日期三级联动下拉框选择菜单
Dec 03 Javascript
解决koa2 ctx.render is not a function报错问题
Aug 07 Javascript
countUp.js实现数字滚动效果
Oct 18 Javascript
p5.js临摹动态图形的方法
Oct 23 Javascript
node.js如何根据URL返回指定的图片详解
Oct 21 Javascript
Vuex 单状态库与多模块状态库详解
Dec 11 #Javascript
微信小程序实现slideUp、slideDown滑动效果及点击空白隐藏功能示例
Dec 11 #Javascript
微信小程序实现两个页面传值的方法分析
Dec 11 #Javascript
jQuery使用bind动态绑定事件无效的处理方法
Dec 11 #jQuery
微信小程序实现的3d轮播图效果示例【基于swiper组件】
Dec 11 #Javascript
vue-cli 3.0 版本与3.0以下版本在搭建项目时的区别详解
Dec 11 #Javascript
微信小程序非swiper组件实现的自定义伪3D轮播图效果示例
Dec 11 #Javascript
You might like
简单分析ucenter 会员同步登录通信原理
2014/08/25 PHP
PHP将字符分解为多个字符串的方法
2014/11/22 PHP
帝国CMS留言板回复后发送EMAIL通知客户
2015/07/06 PHP
PHP实现GIF图片验证码
2015/11/04 PHP
jQuery关于导航条背景切换效果实现示例
2013/09/04 Javascript
div模拟选择框示例代码
2013/11/03 Javascript
防止登录页面出现在frame中js代码
2014/07/22 Javascript
JavaScript获取按钮所在form表单id的方法
2015/04/02 Javascript
实例详解jQuery的无new构建
2016/08/02 Javascript
通过jquery实现页面的动画效果(实例代码)
2016/09/18 Javascript
angularjs结合html5实现拖拽功能
2018/06/25 Javascript
JavaScript实现数组全排列、去重及求最大值算法示例
2018/07/30 Javascript
Vue.js 实现数据展示全部和收起功能
2018/09/05 Javascript
JS开发常用工具函数(小结)
2019/07/04 Javascript
layer.open提交子页面的form和layedit文本编辑内容的方法
2019/09/27 Javascript
Vue Cli3 打包配置并自动忽略console.log语句的方法
2020/04/23 Javascript
[05:20]2018DOTA2亚洲邀请赛主赛事第三日战况回顾 LGD率先挺进胜者组决赛
2018/04/06 DOTA
Python编程之Re模块下的函数介绍
2017/10/28 Python
详解Django的CSRF认证实现
2018/10/09 Python
在mac下查找python包存放路径site-packages的实现方法
2018/11/06 Python
Python学习笔记之While循环用法分析
2019/08/14 Python
Python3从零开始搭建一个语音对话机器人的实现
2019/08/23 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
2020/01/10 Python
Django设置Postgresql的操作
2020/05/14 Python
Python中openpyxl实现vlookup函数的实例
2020/10/28 Python
css3实现一款模仿iphone样式的注册表单
2013/03/20 HTML / CSS
HTML5实时语音通话聊天MP3压缩传输3KB每秒
2019/08/28 HTML / CSS
GUESS Factory加拿大:牛仔裤、服装及配饰
2019/09/20 全球购物
super()与this()的区别
2016/01/17 面试题
幼儿园教师国培感言
2014/02/02 职场文书
主办会计岗位职责
2014/03/13 职场文书
新学期开学标语
2014/06/30 职场文书
语文教研活动总结
2014/07/02 职场文书
2016党校培训心得体会
2016/01/07 职场文书
Python自动化之批量处理工作簿和工作表
2021/06/03 Python
Go 通过结构struct实现接口interface的问题
2021/10/05 Golang