当前位置: 首页 > article >正文

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

效果:


http://www.kler.cn/a/158395.html

相关文章:

  • 游戏配置表的导入使用
  • windows下DSS界面本地集成linkis管理台
  • 记一次使用Java8新特性中的parallelStream⭐️数据流引发的接口异常以及解决方法
  • 手写promise A+、catch、finally、all、allsettled、any、race
  • 【CTA认证】Android CTA资料及信息安全要求
  • 微信小程序之猜数字和猜拳小游戏
  • Java导出word
  • 为什么游戏公司不太愿意采用“微服务”架构?
  • 【FreeRTOS】消息队列——简介、常用API函数、注意事项、项目实现
  • python中的集合
  • IDEA中,光标移动快捷键(Shift + 滚轮前后滚动:当前文件的横向滚动轴滚动。)
  • 深入理解 Vue 组件:构建优雅的前端应用
  • JAVA代码优化:Token验证处理
  • Isaac Sim教程05 机器人简单组装及传感器
  • 特殊二叉树——堆
  • 直播预告 | 降本增效持续深化,如何找准 FinOps 关键着力点?
  • 12月5日作业
  • 多线程--11--ConcurrentHashMap
  • 记一次若依二开的简单流程
  • mysql原理--InnoDB记录结构