说说React服务端渲染怎么做?
在SSR中,我们了解到Server-Side Rendering ,简称SSR,意为服务端渲染
指由服务侧完成页面的 HTML 结构拼接的页面处理技术,发送到浏览器,然后为其绑定状态与事件,成为完全可交互页面的过程
其解决的问题主要有两个: SEO,由于搜索引擎爬虫抓取工具可以直接查看完全渲染的页面 加速首屏加载,解决首屏白屏问题
在react中,实现SSR主要有两种形式: 手动搭建一个 SSR 框架 使用成熟的SSR 框架,如 Next.JS
这里主要以手动搭建一个SSR框架进行实现
首先通过express启动一个app.js文件,用于监听3000端口的请求,当请求根目录时,返回HTML,如下: const express = require("express") const app = express() app.get("/", (req,res) => res.send(` ssr demo Hello world `)) app.listen(3000, () => console.log("Exampleapp listening on port 3000!"))
然后再服务器中编写react代码,在app.js中进行应引用 import React from "react" const Home = () =>{ return home } export default Home
为了让服务器能够识别JSX,这里需要使用webpakc对项目进行打包转换,创建一个配置文件webpack.server.js并进行相关配置,如下: const path = require("path") //node的path模块 const nodeExternals = require("webpack-node-externals") module.exports = { target:"node", mode:"development", //开发模式 entry:"./app.js", //入口 output: { //打包出口 filename:"bundle.js", //打包后的文件名 path:path.resolve(__dirname,"build") //存放到根目录的build文件夹 }, externals: [nodeExternals()], //保持node中require的引用方式 module: { rules: [{ //打包规则 test: /.js?$/, //对所有js文件进行打包 loader:"babel-loader", //使用babel-loader进行打包 exclude: /node_modules/,//不打包node_modules中的js文件 options: { presets: ["react","stage-0",["env", { //loader时额外的打包规则,对react,JSX,ES6进行转换 targets: { browsers: ["last 2versions"] //对主流浏览器最近两个版本进行兼容 } }]] } }] } }
接着借助react-dom提供了服务端渲染的 renderToString方法,负责把React组件解析成html import express from "express" import React from "react"//引入React以支持JSX的语法 import { renderToString } from "react-dom/server"//引入renderToString方法 import Home from"./src/containers/Home" const app= express() const content = renderToString() app.get("/",(req,res) => res.send(` ssr demo ${content} `)) app.listen(3001, () => console.log("Exampleapp listening on port 3001!"))
上面的过程中,已经能够成功将组件渲染到了页面上
但是像一些事件处理的方法,是无法在服务端完成,因此需要将组件代码在浏览器中再执行一遍,这种服务器端和客户端共用一套代码的方式就称之为 同构
重构通俗讲就是一套React代码在服务器上运行一遍,到达浏览器又运行一遍: 服务端渲染完成页面结构 浏览器端渲染完成事件绑定
浏览器实现事件绑定的方式为让浏览器去拉取JS文件执行,让JS代码来控制,因此需要引入script标签
通过script标签为页面引入客户端执行的react代码,并通过express的static中间件为js文件配置路由,修改如下: import express from "express" import React from "react"//引入React以支持JSX的语法 import { renderToString } from"react-dom/server"//引入renderToString方法 import Home from "./src/containers/Home" const app = express() app.use(express.static("public")); //使用express提供的static中间件,中间件会将所有静态文件的路由指向public文件夹 const content = renderToString() app.get("/",(req,res)=>res.send(` ssr demo ${content} `)) app.listen(3001, () =>console.log("Example app listening on port 3001!"))
然后再客户端执行以下react代码,新建webpack.client.js作为客户端React代码的webpack配置文件如下: const path = require("path") //node的path模块 module.exports = { mode:"development", //开发模式 entry:"./src/client/index.js", //入口 output: { //打包出口 filename:"index.js", //打包后的文件名 path:path.resolve(__dirname,"public") //存放到根目录的build文件夹 }, module: { rules: [{ //打包规则 test: /.js?$/, //对所有js文件进行打包 loader:"babel-loader", //使用babel-loader进行打包 exclude: /node_modules/, //不打包node_modules中的js文件 options: { presets: ["react","stage-0",["env", { //loader时额外的打包规则,这里对react,JSX进行转换 targets: { browsers: ["last 2versions"] //对主流浏览器最近两个版本进行兼容 } }]] } }] } }
出国留学留学生机票可以为你省钱收到了海外大学录取通知书,很多同学第一件事就是查看机票。如果把握好时机,买到留学生机票,说不定可以在机票开销上省下一大笔。最佳订票时间出行前的三个月一般在出行前的两三个月,是出国机
人物故事21岁的00后女孩杨倩火了,火得实至名归2021年7月24日,在东京奥运会女子10米气步枪决赛中,中国00后小将杨倩以251。8环的成绩夺得冠军。这是中国奥运代表团在东京的首金,也是东京奥运会产生的首枚金牌。21岁的00
以奋斗为曲,谱青春之歌高中高考高考作文自己写的,有问题还请各位大佬指出,好的部分大家也可以借鉴。九万里云路,鲲鹏抟扶乘天地八千里浩海,精卫御石斗苍茫一百年理想,青年立志谋复兴。生逢其时,重任在肩,立鸿鹄
方圆谈坚持勤俭办一切事业近日,关于提高中央行政事业单位国有资产管理效能坚持勤俭办一切事业的实施意见印发。从严格资产配置处置严控资产运行耗费提升资产保障能力强化计划预算控制推动管理方式转型涵养勤俭节约风尚六
高层次的世界里,只有利益和得失,至于感情和道德,皆是手段有句话叫花半秒钟看透事物本质的人,和花一辈子看不透事物本质的人,注定有着截然不同的两种结局。我想问的是这句话究竟表达的是表象,还是本质?可能有人会说这句话说的是事实,原因就是它看起
杜兰特东契奇联手能否成为现实?独行侠篮网湖人三方交易可能实现若说本赛季最神奇球队,那么达拉斯独行侠一定榜上有名。东契奇率领的这支球队,它能面对战绩排名联盟垫底前三甲球队依次输一遍,也能离奇输掉一些本来可以取胜的比赛,但它也不乏落后逆境中最终
勇士对凯尔特人来说无疑是一个残酷的现实杰森塔图姆和波士顿凯尔特人害怕斯蒂芬库里和金州勇士。上周六,勇士队在202223赛季淘汰了联盟最好的球队之后,这一点就很明显了。随着金州勇士队在这个赛季的挣扎和凯尔特人队的失利,人
注意!滴滴又有这些调整,与司机利益相关最近,据介绍,滴滴最近有了不少调整动作,以维护和优化运力结构,其中这些涉及到司机利益的值得引起大家的注意。首先,口碑值新版上线,这次的改版有比较大的调整,主要体现在安全分和服务分方
文案那些激励人们拥抱现实自我救赎的句子1你若问人问题,他答非所问,便已是答了,毋需再问。2这个世纪疯狂,没人性,腐败。你却一直清醒,温柔,一尘不染。3从前日色变得慢,车,马,邮件都慢。一生只够爱一个人。4很多时候,咨询
天哪,能量还守恒吗?都知道,能量守恒定律即为一个系统的总能量的改变只能等于传入或者传出该系统的能量的多少。总能量为系统的机械能热能及除热能以外的任何内能形式的总和。早在2013年,根据人民网消息,美国
全球最大豪华邮轮,比顶级航母还要大!皇家加勒比的海上城市世界上豪华的邮轮有很多,但像皇家加勒比海洋奇迹号这样堪称海上城市的,却屈指可数。海洋奇迹号今年4月在欧洲下水首航,还是一条妥妥的新船,现在主要运营加勒比海航线。作为皇家加勒比绿洲系