简单的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 相关文章推荐
一个符号插入器 中用到的js代码
Sep 04 Javascript
JavaScript面向对象之体会[总结]
Nov 13 Javascript
YUI的Tab切换实现代码
Apr 11 Javascript
js Map List 遍历使用示例
Jul 10 Javascript
JS 获取select(多选下拉)中所选值的示例代码
Aug 02 Javascript
Node.js中的事件驱动编程详解
Aug 16 Javascript
js计算文本框输入的字符数
Oct 23 Javascript
JS实现左边列表移到到右边列表功能
Mar 28 Javascript
浅谈angularJS2中的界面跳转方法
Aug 31 Javascript
原来JS还可以这样拆箱转换详解
Feb 01 Javascript
深入理解JS异步编程-Promise
Jun 03 Javascript
通过实例了解Javascript柯里化流程
Mar 03 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实现二分搜索树
2020/10/25 PHP
特殊字符、常规符号及其代码对照表
2006/06/26 Javascript
javascript下过滤数组重复值的代码
2007/09/10 Javascript
JavaScript 封装Ajax传递的数据代码
2009/06/05 Javascript
jquery trim() 功能源代码
2011/02/14 Javascript
jQuery源码分析-05异步队列 Deferred 使用介绍
2011/11/14 Javascript
利用Javascript判断操作系统的类型实现不同操作系统下的兼容性
2013/01/29 Javascript
javascript中如何处理引号编码&amp;#034;
2013/08/15 Javascript
JavaScript中的Promise使用详解
2015/06/24 Javascript
jquery+CSS实现的水平布局多级网页菜单效果
2015/08/24 Javascript
JavaScript实现弹出模态窗体并接受传值的方法
2016/02/12 Javascript
vue2.0中goods选购栏滚动算法的实现代码
2017/05/17 Javascript
BackBone及其实例探究_动力节点Java学院整理
2017/07/14 Javascript
浅谈Vue-cli 命令行工具分析
2017/11/22 Javascript
对vue v-if v-else-if v-else 的简单使用详解
2018/09/29 Javascript
vue打包之后生成一个配置文件修改接口的方法
2018/12/09 Javascript
详解@Vue/Cli 3 Invalid Host header 错误解决办法
2019/01/02 Javascript
浅谈对于react-thunk中间件的简单理解
2019/05/01 Javascript
Vue+iview+webpack ie浏览器兼容简单处理
2019/09/20 Javascript
[03:27]《辉夜杯》线下训练营 导师CU和海涛指点迷津
2015/10/23 DOTA
Python多线程、异步+多进程爬虫实现代码
2016/02/17 Python
Python 性能优化技巧总结
2016/11/01 Python
python分布式环境下的限流器的示例
2017/10/26 Python
python实现微信远程控制电脑
2018/02/22 Python
python将一个英文语句以单词为单位逆序排放的方法
2018/12/20 Python
浅谈Python类中的self到底是干啥的
2019/11/11 Python
Pytorch maxpool的ceil_mode用法
2020/02/18 Python
jupyter notebook 写代码自动补全的实现
2020/11/02 Python
使用phonegap检测网络状态的方法
2017/03/30 HTML / CSS
康帕斯酒店预订:Compass Hospitality(支持中文)
2018/08/23 全球购物
金融管理专业求职信
2014/07/10 职场文书
高中生打架检讨书1000字
2015/02/17 职场文书
2015大学生求职信范文
2015/03/20 职场文书
Sleuth+logback 设置traceid 及自定义信息方式
2021/07/26 Java/Android
python工具dtreeviz决策树可视化和模型可解释性
2022/03/03 Python
在SQL Server中使用 Try Catch 处理异常的示例详解
2022/07/15 SQL Server