简单的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 相关文章推荐
jQuery Select(单选) 模拟插件 V1.3.62 改进版
Jul 17 Javascript
jquery延迟加载外部js实现代码
Jan 11 Javascript
简单实例处理url特殊符号&amp;处理(2种方法)
Apr 02 Javascript
jQuery插件StickUp实现网页导航置顶
Apr 12 Javascript
javascript跨域方法、原理以及出现问题解决方法(详解)
Aug 06 Javascript
vue 怎么创建组件及组件使用方法
Jul 27 Javascript
checkbox:click事件触发span元素内容改变的方法
Sep 11 Javascript
JS中this的指向以及call、apply的作用
May 06 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
Apr 19 Javascript
小程序实现搜索框功能
Mar 26 Javascript
jQuery实现的解析本地 XML 文档操作示例
Apr 30 jQuery
如何利用JavaScript实现二叉搜索树
Apr 02 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
关于文本留言本的分页代码
2006/10/09 PHP
PHP 反射(Reflection)使用实例
2015/05/12 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
2016/11/21 PHP
mac系统下安装多个php并自由切换的方法详解
2017/04/21 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
Javascript 兼容firefox的一些问题
2009/05/21 Javascript
JavaScript Event学习第八章 事件的顺序
2010/02/07 Javascript
js获取元素在浏览器中的绝对位置
2010/07/24 Javascript
jQuery客户端分页实例代码
2013/11/18 Javascript
jQuery实现按键盘方向键翻页特效
2015/03/18 Javascript
javascript正则表达式基础知识入门
2015/04/20 Javascript
jQuery弹出层插件Lightbox_me使用指南
2015/04/21 Javascript
Javascript中的return作用及javascript return关键字用法详解
2015/11/05 Javascript
SublimeText自带格式化代码功能之reindent
2015/12/27 Javascript
bootstrap表格分页实例讲解
2016/12/30 Javascript
HTML5实现微信拍摄上传照片功能
2017/04/21 Javascript
vue2项目使用sass的示例代码
2017/06/28 Javascript
JavaScript实现三级联动效果
2017/07/15 Javascript
基于js Canvas实现二次贝塞尔曲线
2018/12/25 Javascript
微信小程序服务器日期格式化问题
2020/01/07 Javascript
微信小程序实现上传照片代码实例解析
2020/08/04 Javascript
[55:44]OG vs NAVI 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
跟老齐学Python之从if开始语句的征程
2014/09/14 Python
python通过伪装头部数据抵抗反爬虫的实例
2018/05/07 Python
Python sqlite3查询操作过程解析
2020/02/20 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
2020/10/23 Python
基于 HTML5 的 WebGL 3D 版俄罗斯方块的示例代码
2018/05/28 HTML / CSS
Sephora丝芙兰澳洲官方网站:国际知名化妆品购物
2016/10/27 全球购物
TripAdvisor台湾:全球最大旅游网站
2018/08/26 全球购物
Bulk Powders意大利:运动补充在线商店
2019/02/09 全球购物
自我评价优秀范文分享
2013/11/30 职场文书
文明寝室标语
2014/06/13 职场文书
党员评议个人总结
2014/10/20 职场文书
2014年学校工作总结
2014/11/20 职场文书
社会实践活动报告
2015/02/05 职场文书
复活读书笔记
2015/06/29 职场文书