ReactDomServer 将react组件转化成html静态标签(SSR服务器渲染)

前言: 因为使用图表里面的formatter函数需要原生的html标签,但是本身技术栈是react,所以为了方便,便使用了ReactDomServer api将react组件转化成html原生标签

引入:

import ReactDomServer from 'react-dom/server';

使用

renderToString()

ReactDOMServer.renderToString(element)

最基础的 SSR API,输入 React 组件(准确来说是ReactElement),输出 HTML 字符串。之后由客户端 hydrate API 对服务端返回的视图结构附加上交互行为,完成页面渲染:

If you call ReactDOM.hydrate() on a node that already has this server-rendered markup, React will preserve it and only attach event handlers.

renderToStaticMarkup()

ReactDOMServer.renderToStaticMarkup(element)

renderToString类似,区别在于 API 设计上,renderToStaticMarkup只用于纯展示(没有事件交互,不需要 hydrate)的场景

This is useful if you want to use React as a simple static page generator, as stripping away the extra attributes can save some bytes. If you plan to use React on the client to make the markup interactive, do not use this method. Instead, use renderToString on the server and ReactDOM.hydrate() on the client.

因此renderToStaticMarkup只生成干净的 HTML,不带额外的 DOM 属性(如data-reactroot),比较干净小巧

二者的渲染结果分别为:

// renderToString
<div data-reactroot=""><h1 class="here">Welcome to React SSR!<!-- --> Hello There!</h1></div>

// renderToStaticMarkup
<div><h1 class="here">Welcome to React SSR! Hello There!</h1></div>

React 16 以后 renderToStaticMarkuprenderToString的实际差异主要在于:

  • renderToStaticMarkup不生成data-reactroot
  • renderToStaticMarkup不在相邻文本节点之间生成<!-- -->(相当于合并了文本节点,不考虑节点复用,算是针对静态渲染的额外优化措施)

所以我这里用的是RenderToStaticMarkup() 方法

代码:

import React from 'react';
import ReactDomServer from 'react-dom/server';
const B =()=>{
    
    const renderHtml = ()=>{
        return ReactDomServer.renderToStaticMarkup(
            <div className="abcd" style={{fontSize:25,marginTop:10,fontWeight:"bold"}}>测试renderToStaticMarkup</div>
        )
    }
    console.log('fff',renderHtml());
    return <div dangerouslySetInnerHTML={{__html:renderHtml()}} />
}
export default B

效果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ReactServer-Side Rendering (SSR) 结合在一起通常用于提高网站的初始加载速度和SEO优化。当一个网站使用 SSR服务器会在用户请求页面时先生成 HTML 内容,然后将这个预渲染HTML 传递给浏览器,这比纯粹的 JavaScript 渲染更快。 在 React 中实现 SSR,你可以使用以下技术栈: 1. **Next.js**:这是一个非常流行的基于 React 的库,内置了 SSR 支持,使得开发过程更加简化。Next.js 可以自动处理页面的渲染、路由、CSS 模块等。 2. **Gatsby.js**:另一个 React 专用的静态站点生成器,它也支持 SSR,并且非常适合数据驱动的内容生成。 3. **React Router + ReactDOM Server**:即使不使用专门的框架,也可以手动在服务器上使用 ReactDOM.render 来创建 HTML 并发送到客户端。 开发官网时,你会进行如下步骤: - **组件化设计**:将 UI 分解为可重用的 React 组件。 - **创建服务器组件Server Components)**:在 Next.js 中,你编写这些组件并在服务器渲染它们。 - **数据获取**:使用 API 或静态数据,确保数据在服务器端就绪。 - **服务端渲染生命周期**:理解 `getServerSideProps` 和 `getStaticProps` 这样的生命周期方法。 - **客户端渲染优化**:确保在用户交互时,只有必要的部分进行客户端渲染。 - **SEO优化**:设置正确的元标签和预渲染路径,提升搜索引擎抓取和用户体验。 相关问题: 1. Next.js 或 Gatsby.js 提供的 SSR 功能如何简化开发过程? 2. 如何在服务器端和客户端分别调用 React 组件? 3. 服务器渲染和预渲染有什么区别?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值