简单的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.showModalDialog使用手册
Jan 11 Javascript
javascript常用对话框小集
Sep 13 Javascript
node.js中的buffer.write方法使用说明
Dec 10 Javascript
jQuery中delegate()方法用法实例
Jan 19 Javascript
JavaScript电子时钟倒计时
Jan 09 Javascript
JavaScript动态添加css样式和script标签
Jul 19 Javascript
js显示动态时间的方法详解
Aug 20 Javascript
node.js实现博客小爬虫的实例代码
Oct 08 Javascript
原生js实现节日时间倒计时功能
Jan 18 Javascript
jquery dataTable 获取某行数据
May 05 jQuery
vue父子组件间引用之$parent、$children
May 20 Javascript
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
Jul 28 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性能优化分析工具XDebug 大型网站调试工具
2011/05/22 PHP
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
2011/11/10 PHP
Codeigniter发送邮件的方法
2015/03/19 PHP
PHP输出日历表代码实例
2015/03/27 PHP
PHP随机生成唯一HASH值自定义函数
2015/04/20 PHP
自定义min版smarty模板引擎MinSmarty.class.php文件及用法
2016/05/20 PHP
PHP里的$_GET数组介绍
2019/03/22 PHP
jQuery 使用手册(三)
2009/09/23 Javascript
基于jQuery的仿flash的广告轮播代码
2010/11/04 Javascript
jQuery 淡出一个图像到另一个图像的实现代码
2013/06/12 Javascript
限制textbox或textarea输入字符长度的JS代码
2013/10/16 Javascript
Nodejs中读取中文文件编码问题、发送邮件和定时任务实例
2015/01/01 NodeJs
详解Javascript事件驱动编程
2016/01/03 Javascript
微信小程序 数据访问实例详解
2016/10/08 Javascript
jqGrid翻页时数据选中丢失问题的解决办法
2017/02/13 Javascript
微信小程序 setData 对 data数据影响问题
2019/04/18 Javascript
JavaScript实现简单随机点名器
2019/11/21 Javascript
Vue 实现简易多行滚动&quot;弹幕&quot;效果
2020/01/02 Javascript
微信小程序返回上一级页面的实现代码
2020/06/19 Javascript
vue 在单页面应用里使用二级套嵌路由
2020/12/19 Vue.js
对python多线程中Lock()与RLock()锁详解
2019/01/11 Python
Python爬虫实现验证码登录代码实例
2019/05/10 Python
django数据关系一对多、多对多模型、自关联的建立
2019/07/24 Python
Python中生成一个指定长度的随机字符串实现示例
2019/11/06 Python
python模拟实现斗地主发牌
2020/01/07 Python
Python requests模块cookie实例解析
2020/04/14 Python
PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解
2020/04/16 Python
CSS3制作Dropdown下拉菜单的方法
2015/07/18 HTML / CSS
很酷的小工具和电子产品商城:GearBest
2016/11/19 全球购物
阿里健康大药房:阿里自营网上药店
2017/08/01 全球购物
捷克移动配件网上商店:ProMobily.cz
2019/03/15 全球购物
学校与家长安全责任书
2014/07/23 职场文书
违反纪律检讨书范文
2015/05/07 职场文书
爱国教育主题班会
2015/08/14 职场文书
导游词之西安骊山
2019/12/20 职场文书
python实现简单石头剪刀布游戏
2021/10/24 Python