第一章 使用 react-router 创建express服务器

npm install express

第一节 配置server.js

新建 server/server.js.js

import path from 'path';
import fs from 'fs';
import express from 'express';
import React from 'react';
import ReactDOMServer from 'react-dom/server';+ import App from '../src/containers/App';

在src/index 文件中

ReactDOM.hydrate(<App />, document.getElementById('root'));

第二节 配置babel

npm install @babel/polyfill @babel/register @babel/preset-env @babel/preset-react

应该安装的 Babel 包是@Babel/polyfill,它编译诸如 async/await;@Babel/register 这样的函数来告诉 Babel 它应该使用.Js 拓展; @Babel/preset-env 和@Babel/preset-React 来配置 Babel 使用 React:

server/index.js

require('@babel/polyfill');require('@babel/register')({presets: ['@babel/preset-env', '@babel/preset-react'],
});require('./server');

在npm中进行配置

第三节 使用browserRouter来进行渲染

在运行 npm run ssr 命令之前,您应该始终在 Node.js 服务器使用构建版本之前执行 npm run build。但是,如果现在运行 npm 运行 ssr 命令,就会收到一个错误消息,说 BrowserRouter 需要一个 DOM 来渲染。由于反应路由器的设置方式,使用 SSR 时需要使用 StaticRouter 组件,而不是 BrowserRouter:

https://github.com/react-static/react-static/issues/343

我已经上传了问题解决

但是最终渲染的样子是这样的,不知道真不正确

第二章 使用React Helmet添加头部标签

假设您希望您的应用程序被搜索引擎索引,那么您需要为爬虫设置头标记,以标识页面上的内容。这是您希望为每个路由动态地执行的操作,因为每个路由都有不同的内容。在反应应用中设置这些头部标签的一个流行包是 React Helmet,它支持 SSR。您可以安装反应头盔与 npm:

npm install react-helmet

第一节 在需要的组件中使用 react-helmet

import React from 'react';
import styled from 'styled-components';
+ import Helmet from 'react-helmet';...const Header = () => (
+  <>
+    <Helmet>
+      <title>Q&A Feed</title>
+      <meta name='description' content='This is a Community Feed project build with React' />
+    </Helmet><HeaderWrapper><Title>Q&A Feed</Title></HeaderWrapper>
+  </>
);export default Header;

第二节 在server.js中设置

import path from 'path';
import fs from 'fs';
import express from 'express';
import React from 'react';
import ReactDOMServer from 'react-dom/server';
import { StaticRouter as Router } from 'react-router-dom';
+ import Helmet from 'react-helmet';...app.get('/*', (req, res) => {const context = {};const app = ReactDOMServer.renderToString(<Router location={req.url} context={context}><App /></Router>,);
+  const helmet = Helmet.renderStatic();const indexFile = path.resolve('./build/index.html');fs.readFile(indexFile, 'utf8', (err, data) => {if (err) {console.error('Something went wrong:', err);return res.status(500).send('Oops, better luck next time!');}data = data.replace('<div id="root"></div>', `<div id="root">${app}</div>`);
+   data = data.replace('<meta name="helmet"/>', `${helmet.title.toString()}${helmet.meta.toString()}`);return res.send(data);});
});

第三节 在HTML中设置相关的参数

在这个文件的最后一行,你已经定义了 < meta name = " Helmet"/> 元素应该被 React Helmet 创建的 title 和 meta 标签所取代。要使用这些标记替换此元素成为可能,请将此元素添加到 public 目录中的 index. html 中。此外,你必须删除现在已经由 React Helmet 创建的 title 元素:

<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8" /><link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico" /><metaname="viewport"content="width=device-width, initial-scale=1, shrink-to-fit=no"/><meta name="theme-color" content="#000000" /><link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
+   <meta name="helmet" />
-   <title>React App</title></head>
...

附录

参考:https://github.com/PacktPublishing/React-Projects/tree/ch4-initial

零基础到入门React SSR相关推荐

  1. 零基础前端入门,真正难在哪里?简说编程思想和逻辑思维

    很多同学跟我说,学前端学的很迷茫, 就这样,问他为啥迷茫吧,说也说不出来啥具体的.就是也学了一堆东西,也确实都是前端开发工作当中要用的.但依然不知道前路如何. 这里就有一个"前端入门的标准& ...

  2. 视频教程-零基础JS入门系列课程(2)之JS语法基础精讲-JavaScript

    零基础JS入门系列课程(2)之JS语法基础精讲 螺钉课堂讲师,擅长Vue.React.ReactNative.NodeJS等前端框架及技术 邓老师 ¥59.00 立即订阅 扫码下载「CSDN程序员学院 ...

  3. 零基础JavaScript入门教程(1)–走进JavaScript的世界

    点此查看 所有教程.项目.源码导航 本文目录 1. 前言 2. JS的历史 3. JS的地位 4. JS与HTML.CSS的区别 5. JS是真正的编程语言 6. JS的组成部分 7. 小结 1. 前 ...

  4. 如何零基础学习python语言_零基础如何入门Python语言?有哪些学习建议?

    众所周知,Python目前是最受欢迎的编程语言之一,尤其是对于零基础的初学者来说,Python语言更是十分的友好.因此,不少初学者常常会有这样一个共同的疑惑,零基础如何入门Python语言?本文就来给 ...

  5. 零基础AJAX入门(含Demo演示源文件)

    零基础AJAX入门(含Demo演示源文件) 作者:一点一滴的Beer  个人主页:http://www.cnblogs.com/beer 摘要:因为笔者的大四毕业设计是做WebGIS系统,用过Web版 ...

  6. 零基础学python语言_零基础如何入门Python语言?有哪些学习建议?

    众所周知,Python目前是最受欢迎的编程语言之一,尤其是对于零基础的初学者来说,Python语言更是十分的友好.因此,不少初学者常常会有这样一个共同的疑惑,零基础如何入门Python语言?本文就来给 ...

  7. 零基础自学python看什么书-零基础Python入门看哪本书好?这里有答案

    原标题:零基础Python入门看哪本书好?这里有答案 Python入门看哪本书好呢?Python入门不知道该选哪本书?Python入门没有一本好书引导,会很难吗?你还在为这些问题困扰吗?今天小编就来解 ...

  8. layuiadmin上手好难_新手自学板绘先学SAI还是PS好?零基础绘画入门需知!

    原标题:新手自学板绘先学SAI还是PS好?零基础绘画入门需知! 新手自学板绘先学SAI还是PS好?初学者如何入门绘画?学习板画难吗?怎样才能学习好绘画?想必这些都是绘画初学者们经常在想的问题吧,就是不 ...

  9. docker启动sqlserver_ASP.NET Core容器化技术Docker零基础从入门到实战演练

    <ASP.NET Core使用Docker进行容器化托管部署> 一.课程介绍 人生苦短,我用.NET Core!今天给大家分享一下Asp.Net Core以Docker进行容器化部署托管, ...

最新文章

  1. [转]软件项目版本号的命名规则及格式
  2. 【2021年度训练联盟热身训练赛第二场】g2g c u l8r(python)
  3. 较复杂js的书写格式
  4. nginx 缓存配置及报错解决
  5. 基于边缘云的机器流量管理技术实战
  6. toast弹窗_Android 开发(一):Toast弹窗与获取控件的值
  7. 利用丁香园数据生成疫情分布地图(R语言)| 博文精选
  8. JAVA菜鸟入门HelloWorld
  9. 深度学习(六十六)生成模型、最大化似然、KL散度
  10. 关机状态下启动微型计算机叫什么,教你电脑关机后自动重启是什么原因
  11. 拓端tecdat|R语言样条曲线、决策树、Adaboost、梯度提升(GBM)算法进行回归、分类和动态可视化
  12. pandas读取与存储操作详解
  13. 08CMS之新建独立页面
  14. iredmail mysql 密码_CloudCare-iRedMail 运行环境镜像使用指南
  15. 【Microsoft Azure 的1024种玩法】七.Azure云端搭建部署属于自己的维基百科
  16. Decorate Apple Tree
  17. 从零开始Kubernetes CronJob实现任务调度
  18. Go 语言中三个点的用法
  19. [LOJ#3124][CTS2019]氪金手游(概率 + 树形 DP + 容斥)
  20. 记得十年前谷歌大量使用python_关于利用Python玩转百万答题

热门文章

  1. 在学RTX之前的操作系统知识
  2. 杭州卫星地图 百度卫星地图(含道路、标签信息叠加)
  3. 第三次工业革命(六)
  4. 安科瑞物联网技术在智慧电网中的应用-Susie 周
  5. 租房信息采集并做数据分析
  6. 堆栈内存两张图理解-来自珠峰猛男周啸天
  7. springcloud gateway
  8. NVT SDK开关机LOGO替换实践
  9. yl335b分拣站单元流程图_基于PLC与MCGS的YL-335B分拣单元的创新设计
  10. Segment Anything CV界的GPT—prompt-based里程碑式研究成果