简单的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 相关文章推荐
window.open的功能全解析
Oct 10 Javascript
[原创]IE view-source 无法查看看源码 JavaScript看网页源码
Jul 19 Javascript
JQuery 将元素显示在屏幕的中央的代码
Feb 27 Javascript
离开页面时检测表单元素是否被修改,提示保存的js代码
Aug 25 Javascript
实例详解angularjs和ajax的结合使用
Oct 22 Javascript
简单理解JavaScript中的封装与继承特性
Mar 19 Javascript
浅谈jquery.form.js的ajaxSubmit和ajaxForm的使用
Sep 09 Javascript
把JavaScript代码改成ES6语法不完全指南(分享)
Sep 10 Javascript
基于 D3.js 绘制动态进度条的实例详解
Feb 26 Javascript
vue-cli 首屏加载优化问题
Nov 06 Javascript
Javascript新手入门之字符串拼接与变量的应用
Dec 03 Javascript
微信小程序基础教程之echart的使用
Jun 01 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 class中self,parent,this的区别以及实例介绍
2013/04/24 PHP
php中使用array_filter()函数过滤空数组的实现代码
2014/08/19 PHP
destoon出现验证码不显示时的紧急处理方法
2014/08/22 PHP
PHP版微信小店接口开发实例
2016/11/12 PHP
PHP未登录自动跳转到登录页面
2016/12/21 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
2018/10/12 PHP
jQuery 学习6 操纵元素显示效果的函数
2010/02/07 Javascript
getElementsByTagName vs selectNodes效率 及兼容的selectNodes实现
2010/02/26 Javascript
JS鼠标事件大全 推荐收藏
2011/11/01 Javascript
JavaScript版TAB选项卡效果实例
2013/08/16 Javascript
JS实现灵巧的下拉导航效果代码
2015/08/25 Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
2017/12/08 Javascript
浅谈Vue 数据响应式原理
2018/05/07 Javascript
JavaScript中this用法学习笔记
2019/03/17 Javascript
个人小程序接入支付解决方案
2019/05/23 Javascript
原生js实现商品筛选功能
2019/10/28 Javascript
ES6 async、await的基本使用方法示例
2020/06/06 Javascript
[42:23]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第二场 12.10
2020/12/13 DOTA
Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
2017/07/20 Python
python select.select模块通信全过程解析
2017/09/20 Python
Python实现简易Web爬虫详解
2018/01/03 Python
Python爬虫实现全国失信被执行人名单查询功能示例
2018/05/03 Python
linux查找当前python解释器的位置方法
2019/02/20 Python
Python DataFrame一列拆成多列以及一行拆成多行
2019/08/06 Python
基于Python的图像数据增强Data Augmentation解析
2019/08/13 Python
python函数的作用域及关键字详解
2019/08/20 Python
Python sep参数使用方法详解
2020/02/12 Python
使用Django实现把两个模型类的数据聚合在一起
2020/03/28 Python
前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)
2018/07/12 HTML / CSS
美国名表在线商城:Ashford(支持中文)
2019/09/24 全球购物
制药工程专业应届生求职信
2013/09/24 职场文书
模具专业推荐信
2013/10/30 职场文书
关于召开会议的通知
2015/04/15 职场文书
2016党员干部反腐倡廉心得体会
2016/01/13 职场文书
《吸血鬼:避世 血猎》官宣4.27发售 系列首款大逃杀
2022/04/03 其他游戏
Java 死锁解决方案
2022/05/11 Java/Android