简单的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 相关文章推荐
chrome原生方法之数组
Nov 30 Javascript
简易js代码实现计算器操作
Apr 15 Javascript
javascript删除数组元素并且数组长度减小的简单实例
Feb 14 Javascript
判断字符串的长度(优化版)中文占两个字符
Oct 30 Javascript
js实现双击图片放大单击缩小的方法
Feb 17 Javascript
ExtJs动态生成treepanel的Json格式
Jul 19 Javascript
jQuery点击按钮弹出遮罩层且内容居中特效
Dec 14 Javascript
canvas实现弧形可拖动进度条效果
May 11 Javascript
webpack构建vue项目的详细教程(配置篇)
Jul 17 Javascript
mpvue跳转页面及注意事项
Aug 03 Javascript
在layer弹层layer.prompt中,修改placeholder的实现方法
Sep 27 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
Nov 12 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系统流量分析的程序
2006/10/09 PHP
php 数据库字段复用的基本原理与示例
2011/07/22 PHP
PHP运行SVN命令显示某用户的文件更新记录的代码
2014/01/03 PHP
php计算当前程序执行时间示例
2014/04/24 PHP
php 使用array函数实现分页
2015/02/13 PHP
1亿条数据如何分表100张到Mysql数据库中(PHP)
2015/07/29 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
2016/03/21 PHP
Thinkphp5.0自动生成模块及目录的方法详解
2017/04/17 PHP
js身份证验证超强脚本
2008/10/26 Javascript
JavaScript 设计模式学习 Singleton
2009/07/27 Javascript
JavaScript面向对象(极简主义法minimalist approach)
2012/07/17 Javascript
js multiple全选与取消全选实现代码
2012/12/04 Javascript
Android中资源文件(非代码部分)的使用概览
2012/12/18 Javascript
前台js改变Session的值(用ajax实现)
2012/12/28 Javascript
鼠标移到导航当前位置的LI变色处于选中状态
2013/08/23 Javascript
js动态修改整个页面样式达到换肤效果
2014/05/23 Javascript
实例详解Nodejs 保存 payload 发送过来的文件
2016/01/14 NodeJs
jQuery中bind(),live(),delegate(),on()绑定事件方法实例详解
2016/01/19 Javascript
ionic实现可滑动的tab选项卡切换效果
2020/04/15 Javascript
JS比较两个数值的大小实例
2016/11/25 Javascript
在Swiper内如何制作CSS3动画效果示例代码
2017/12/07 Javascript
用vue写一个仿简书的轮播图的示例代码
2018/03/13 Javascript
深入浅析Vue中的slots/scoped slots
2018/04/03 Javascript
vue组件数据传递、父子组件数据获取,slot,router路由功能示例
2019/03/19 Javascript
详解vue-cli+element-ui树形表格(多级表格折腾小计)
2019/04/17 Javascript
Vue 刷新当前路由的实现代码
2019/09/26 Javascript
vue-devtools的安装和使用步骤详解
2019/10/17 Javascript
Python通过poll实现异步IO的方法
2015/06/04 Python
python中pygame针对游戏窗口的显示方法实例分析(附源码)
2015/11/11 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
2020/04/27 Python
零基础小白多久能学会python
2020/06/22 Python
重构Python代码的六个实例
2020/11/25 Python
Python爬虫自动化爬取b站实时弹幕实例方法
2021/01/26 Python
菲律宾领先的在线时尚商店:Zalora菲律宾
2018/02/08 全球购物
Python面试题集
2012/03/08 面试题
初中科学教学反思
2014/01/21 职场文书