React SSR渲染
什么是客户端渲染
CSR:Client Side Rendering
服务器端仅返回 JSON 数据, DATA 和 HTML 在客户端进行渲染
什么是服务器端渲染
SSR:Server Side Rendering
服务器端返回HTML, DATA 和 HTML 在服务器端进行渲染.
React SSR 同构
同构指的是代码复用. 即实现客户端和服务器端最大程度的代码复用
客户端渲染存在的问题
1. 首屏等待时间长, 用户体验差
2. 页面结构为空, 不利于 SEO
实现 SSR
项目结构
react-ssrsrc 源代码文件夹client 客户端代码server 服务器端代码share 同构代码
在服务端文件夹(server)中新建 http.js 创建 Node 服务器
// server/http.js
import express from 'express';const app = express();app.listen(3000, () => console.log('app is running on 3000 port'));export default app;
1. 引入要渲染的React 组件
2. 通过renderToString 方法将React 组件转换为HTML 字符串
3. 将结果HTML字符串想到到客户端
renderToString 方法用于将React 组件转换为HTML 字符串, 通过react-dom/server 导入.
新建 index.js 和 renderer.js
renderer.js 文件导出一个方法,方法返回服务端要渲染的 html 模板
index.js 通过 send 方法把renderer响应给客户端
// server/index.js
import app from './http';
import renderer from './renderer';app.get('*', (req, res) => {res.send(renderer());
});
// server/renderer.js
import React from "react";
import { renderToString } from "react-dom/server";export default () => {const content = renderToString(<div>React SSR</div>);return `<html><head><title>React SSR</title></head><body><div id="root">${content}</div></body></html>
`;
};
因为Node 环境不支持ESModule 模块系统, 不支持JSX 语法,所以需要通过webpack 对项目进行打包
//webpack.server.js
const path = require('path');
const nodeExternals = require('webpack-node-externals');const config = {mode: "development",target: 'node',entry: './src/server/index.js',output: {path: path.join(__dirname, 'build'),filename: 'bundle.js'},module: {rules: [{test: /\.js$/,exclude: /node_modules/,use: {loader: "babel-loader",options: {presets: ["@babel/preset-env","@babel/preset-react"]}}}]}
}
配置打包命令
dev:server-build 打包文件,并监听文件,文件发生变化,重新打包
dev:server-run 监听 build 文件夹发生变化执行 node build/bundle.js
"scripts": {"dev:server-run": "nodemon --watch build --exec \"node build/bundle.js\"","dev:server-build": "webpack --config webpack.server.js --watch",}
React SSR 实现给元素添加事件
React SSR渲染相关推荐
- 我很懒,什么都没留下系列 之 教你上手React服务端渲染(React SSR) HMR
技术栈:webpack3.9.1+webpack-dev-server2.9.5+React16.x + express4.x 前言 (好慌!可能是因为我很懒,导致...,然后,好吧,我比较懒,没有然 ...
- markdownpad2 html渲染组件出错_「万字长文」一文吃透React SSR服务端同构渲染
写在前面 前段时间一直在研究 react ssr技术,然后写了一个完整的 ssr开发骨架.今天写文,主要是把我的研究成果的精华内容整理落地,另外通过再次梳理希望发现更多优化的地方,也希望可以让更多的人 ...
- react native text换行_基于React+Koa实现React SSR服务端渲染
React Server-Side Rendering 其实这个概念很早之前就有了解了,出于没有应用场景原因,之前一直都只停留在了解API的层面,未曾去实践.快到周末闲来无事,自己复盘了下之前做的新商 ...
- react ssr php,一文吃透 React SSR 服务端渲染和同构原理
全网最完整的 React SSR 同构技术原理解析与实践,从零开始手把手带你打造自己的同构应用开发骨架,帮助大家彻底深入理解服务端渲染及底层实现原理,学完本课程,你也可以打造自己的同构框架. 写在前面 ...
- React SSR: 基于 express 自构建 SSR 服务端渲染
React SSR: 基于 express 自构建 SSR 服务端渲染 文章目录 React SSR: 基于 express 自构建 SSR 服务端渲染 完整代码示例 前情提要 构建 CSR 项目 项 ...
- React SSR 服务器端渲染
React SSR 介绍 什么是客户端渲染 CSR: Client Side Rendering 服务器端仅返回 JSON 数据,DATA 和 HTML 在客户端进行渲染 什么是服务器端渲染 SSR: ...
- react ssr 服务端渲染入门
react ssr 服务端渲染入门 前言 前后端同构,作为针对单页应用 SEO 优化乏力.首屏速度瓶颈等问题而产出的解决方案,近来在 react.vue 等前端技术栈中都得到了支持.当我们正打算抛弃传 ...
- React SSR【React服务器端渲染】
目录 1.React SSR 介绍 2.服务器端渲染快速开始 3.客户端 React 附加事件 4.优化 5.路由支持 6.Redux 支持 1.React SSR 介绍 什么是客户端渲染 ...
- React SSR - 01 SSR 介绍 和 快速开始
React SSR 介绍 什么是客户端渲染 CSR:Client Side Rendering 数据和 HTML 的拼接是在客户端(浏览器)使用 JavaScript 完成的,服务端只需要返回 JSO ...
- 大前端时代,如何做好C 端业务下的React SSR?\n
React在中后台业务里已经很好落地了,但对于C端(给用户使用的端,比如PC/H5)业务有其特殊性,对性能要求比较苛刻,且有SEO需求.另外团队层面也希望能够统一技术栈,小伙伴们希望成长,那么如何能够 ...
最新文章
- C++ 从双重检查锁定问题 到 内存屏障的一些思考
- Invokedynamic:Java的秘密武器
- hrtimer的简单使用 + 原理和实现【转】
- 四川大学c语言真题及答案新课标,四川大学C语言2003年真题_跨考网
- Python envoy 模块源码剖析
- 警惕!不要让页面响应时间成为应用性能指标上的杠精
- Python的__init__和self是做什么的?
- 统计学常见分布、概念
- 蓝桥杯训练 2n皇后问题
- GBK字库集测试求助
- java接口压力测试
- stl文件unity_Unity导入STL格式模型(二)
- 20162327WJH第五周作业
- GitHub iOS开源项目
- [paper]DeepFool: a simple and accurate method to fool deep neural networks
- Springboot整合JdbcTemplate实现分页查询
- 大巧不工Web前端设计修炼之道——(8)浅谈Web发展的未来
- Context-Aware Zero-Shot Recognition 论文翻译
- 租用游艇问题(pta)
- Createprocess 函数运行出错的原因和解决办法
热门文章
- 把Excel批注的“红三角”放在单元格左上角_excel批注的玩法,看看你会几个
- 17.光照(点光源)
- 自定义android时间表盘选择器
- 互联网周刊:移动互联网时代的运营商之失zz
- ROS中gazebo工具学习(使用gazebo加载机器人模型)
- html5做九九乘法表,利用JavaScript制作九九乘法表实例教程
- 腾讯程序员平均月薪7.48万,分分钟变身“柠檬精”
- 深度学习: 指数加权平均
- React-native项目中如何使用阿里字体库呢?
- JS_原生js实现60秒倒计时