【问题标题】:How to use JSX as content for InfoWindow from Google Maps API?如何使用 JSX 作为来自 Google Maps API 的 InfoWindow 的内容?
【发布时间】:2019-11-25 14:48:01
【问题描述】:

我在一个需要使用 Google 地图的 ReactJS 项目中工作。我研究了 NPM 上可用的插件,但没有一个能满足我的所有需求,所以我使用纯 JavaScript API for Google-Maps。

按照来自 Google-Maps 的 Info Windows documentation 创建信息窗口,我正在尝试这样做:

data.pieces.map(piece => {
           let pieceInfo = 
    `<div class="infowindow">
       <h1>${piece.Name}</h1>
       <p>${piece.Description}</p>
       <p>${piece.RandomText}</p>
    </div>`
    
    let infowindow = new window.google.maps.InfoWindow({
        content: pieceInfo
    })
})

但是,这种方法并不能处理我拥有的所有用例。由于我正在使用 ReactJS,我想知道是否可以使用 JSX - 及其所有资源 - 作为 InfoWindow 内容。 我的另一个尝试是:

attempt = (content) => (
   <div className="infowindow">
      <h1>{content.Name}</h1>
      <p>{content.Description}</p>
   </div>
)

...

data.pieces.map(piece => {
    let test = this.attempt(piece)
    let infowindow = new window.google.maps.InfoWindow({
          content: test,
})
})

不幸的是,这也不起作用,并在控制台中抛出此错误:

InvalidValueError: setContent: not a string;和 [object 对象]

所以,我不知道如何继续。可以使用 JSX 作为 Info 窗口的内容吗?

提前致谢。

【问题讨论】:

    标签: javascript reactjs google-maps-api-3 jsx infowindow


    【解决方案1】:

    因为它希望你传入一个字符串,所以你必须将 JSX 渲染成一个字符串。我知道这样做的唯一方法是使用 react-dom/server (尽管包名称,此功能也可以在客户端工作):

    import ReactDOMServer from 'react-dom/server';
    
    // ...
    
    data.pieces.map(piece => {
      let content = ReactDOMServer.renderToString(
        <div className="infowindow">
          <h1>{piece.Name}</h1>
          <p>{piece.Description}</p>
        </div>
      );
      let infowindow = new window.google.maps.InfoWindow({ content });
    });
    

    在此处查看更多信息:https://reactjs.org/docs/react-dom-server.html#rendertostring

    【讨论】:

    • “将 React 元素渲染为其初始 HTML。这只应在服务器上使用”renderToString 方法的 VS Code 定义打印在屏幕上。但是 renderToStaticMarkup 似乎也是一种选择
    • 尽管注释,renderToString 和renderToStaticMarkup 都可以在浏览器中使用。诚然,您很少会想在客户端使用它们,但它们是受支持的。
    猜你喜欢
    • 1970-01-01
    • 2011-05-16
    • 2020-08-07
    • 2021-01-15
    • 2018-12-15
    • 2014-03-04
    • 1970-01-01
    • 2015-07-09
    • 2012-03-24
    相关资源
    最近更新 更多