当前位置: 首页 > 面试题库 >

在React不直接管理DOM的区域中的浏览器中使用ReactDOMServer.renderToString可以吗?

衡玄裳
2023-03-14
问题内容

我正在使用Leaflet开发一个应用程序(通过react-
leaflet
)。传单直接操作DOM。react-
leaflet库并没有改变它,它只是为您提供了React组件,您可以使用它们以React友好的方式来控制Leaflet映射。

在这个应用程序中,我想使用包含一些简单元素的div的自定义地图标记。在Leaflet中执行此操作的方法是将标记的icon属性设置为DivIcon,您可以在其中设置自定义HTML。您可以通过将DivIcon的html属性设置为包含HTML的字符串来设置内部HTML。就我而言,我希望从React组件渲染HTML。

为了做到这一点,似乎正确的方法是使用ReactDOMServer.renderToString()将要在地图标记内的Component渲染为字符串,然后将其设置为htmlDivIcon
的属性:

MyMarker.js:

import React, { Component } from 'react'
import { renderToString } from 'react-dom/server'
import { Marker } from 'react-leaflet'
import { divIcon } from 'leaflet'

import MarkerContents from './MarkerContents'

export class MyMarker extends Component {
  render() {
    const markerContents = renderToString(<MarkerContents data={this.props.data} />)
    const myDivIcon = divIcon({
      className: 'my-marker',
      html: markerContents
    })

    return (
      <Marker
        position={this.props.position}
        icon={myDivIcon} />
    )
  }
}

但是,根据React docs:

此[renderToString]仅应在服务器上使用。

这是一个严格的规则,还是仅意味着劝阻人们规避ReactDOM对DOM的有效管理?

我想不出另一种(更好的)方式来实现自己的目标。任何意见或想法将不胜感激。


问题答案:

根据新文档:https :
//reactjs.org/docs/react-dom-server.html

在服务器和浏览器环境中都可以使用以下方法:

  • renderToString()
  • renderToStaticMarkup()


 类似资料:
  • 问题内容: 我已经创建了一个简单的 应用程序(使用),带有联系表单,当用户单击“提交”时,我想生成并发送电子邮件。为此,我一直试图像这样使用: …但是我在导入过程中遇到了很多错误。 我是否在这里缺少某些东西,或者根本不是为在浏览器中使用而设计的?如果是这种情况,我应该考虑其他选择吗? 问题答案: node.js用于服务器端JavaScript,它允许您执行浏览器无法完成的许多工作。 除了mailt

  • 所以我有一个组件,在这个组件中我检查客户端是否登录,如果没有,我重定向到登录页面。在我的其他管理区域组件中,我不使用这个,但我仍然被重定向到客户端登录屏幕。 有人能帮我修一下这些路线吗?

  • 问题内容: 意识到React Native应用旨在使用模拟器进行开发/测试,是否可以使用Web浏览器来测试应用? 存在诸如https://rnplay.org/之类的服务,但是我担心的是,它由https://appetize.io/提供支持,可能会受到每月分钟数的限制。与付费屏幕流媒体服务相比,我还想利用免费/开源技术来实现这一目标。 沿着这些思路,为了在浏览器中测试该应用程序,是否要求该应用程序

  • 问题内容: 我知道有Redis的node.js库;我想做的是运行Redis服务器(在本地主机上或服务器主机上的某个地方),并通过运行在浏览器(例如Greasemonkey或Chrome)中的JavaScript通过HTTP(即根据需要的AJAX或HTTP GET)直接调用它扩展脚本,也可以是小书签或SCRIPT标签)。Redis是否具有本机REST或HTTP API? 问题答案: 您无法通过运行在

  • 认识到React本机应用程序设计为使用模拟器开发/测试,是否可以使用web浏览器也测试应用程序? 服务,例如https://rnplay.org/ 存在,但我担心的是它是由https://appetize.io/ 它可能受到每月分钟数的限制。与付费的屏幕流媒体服务相比,我还想利用免费/开源技术来实现这一点。 按照这些思路,为了在浏览器中测试应用程序,应用程序是否需要使用一个或多个库,这些库允许应用

  • 问题内容: 在旋转动画中,只能在Chrome浏览器中使用,而不能在Firefox中使用。为什么? 问题答案: 当前的Firefox实施失败,除非时间值具有单位。使用或。 注意:W3C明确允许数字0(不带单位)作为长度值,但对于其他值则没有这种意义。我个人希望这种情况有所改变,但目前Firefox的行为并不正确。