简单的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 相关文章推荐
jscript之Open an Excel Spreadsheet
Jun 13 Javascript
jquery ajax 登录验证实现代码
Sep 23 Javascript
jquery 表格分页等操作实现代码(pagedown,pageup)
Apr 11 Javascript
jquery ui resizable bug解决方法
Oct 26 Javascript
Node.js中使用mongoskin操作mongoDB实例
Sep 28 Javascript
jQuery对JSON数据进行排序输出的方法
Jun 24 Javascript
JavaScript检测并限制复选框选中个数的方法
Aug 12 Javascript
使用JavaScript和CSS实现文本隔行换色的方法
Nov 04 Javascript
只需五句话搞定JavaScript作用域(经典)
Jul 26 Javascript
JS switch判断 三目运算 while 及 属性操作代码
Sep 03 Javascript
Vue组件之全局组件与局部组件的使用详解
Oct 09 Javascript
说说如何使用Vuex进行状态管理(小结)
Apr 14 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
Php Ctemplate引擎开发相关内容
2012/03/03 PHP
PHP5.6读写excel表格文件操作示例
2019/02/26 PHP
mongodb和php的用法详解
2019/03/25 PHP
浅析PHP echo 和 print 语句
2020/06/30 PHP
asp.net和asp下ACCESS的参数化查询
2008/06/11 Javascript
jquery 应用代码 方便的排序功能
2010/02/06 Javascript
js下写一个事件队列操作函数
2010/07/19 Javascript
Javascript 类型转换方法
2010/10/24 Javascript
jQuery EasyUI API 中文文档 - Dialog对话框
2011/11/15 Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
2013/10/11 Javascript
AngularJS基础知识笔记之表格
2015/05/10 Javascript
理解javascript中的MVC模式
2016/01/28 Javascript
angular4应用中输入的最小值和最大值的方法
2019/05/17 Javascript
vue中使用百度脑图kityminder-core二次开发的实现
2019/09/26 Javascript
javascript设计模式 ? 备忘录模式原理与用法实例分析
2020/04/21 Javascript
Python爬虫之模拟知乎登录的方法教程
2017/05/25 Python
python学生信息管理系统
2018/03/13 Python
Python3删除排序数组中重复项的方法分析
2019/01/31 Python
django 中QuerySet特性功能详解
2019/07/25 Python
python内存监控工具memory_profiler和guppy的用法详解
2019/07/29 Python
python爬虫scrapy图书分类实例讲解
2020/11/23 Python
Django数据统计功能count()的使用
2020/11/30 Python
泰国演唱会订票网站:StubHub泰国
2018/02/26 全球购物
英国最大的海报商店:GB Posters
2018/03/20 全球购物
全球工业:Global Industrial
2020/02/01 全球购物
信用社实习人员自我鉴定
2013/09/20 职场文书
大学四年规划书范文
2013/12/27 职场文书
会计学生自我鉴定
2014/02/06 职场文书
小学生演讲稿大全
2014/04/25 职场文书
2014年学生管理工作总结
2014/12/20 职场文书
2015年团支部年度工作总结
2015/05/27 职场文书
团支部书记竞选稿
2015/11/21 职场文书
MySQL创建定时任务
2022/01/22 MySQL
Go语言读取txt文档的操作方法
2022/01/22 Golang
Python借助with语句实现代码段只执行有限次
2022/03/23 Python
Python写情书? 10行代码展示如何把情书写在她的照片里
2022/04/21 Python