开发者问题收集

Mapbox无法在标记上添加React组件弹出

2020-11-03
1264

我一直在从事一个房地产项目,但一直无法在标记弹出窗口中添加 reactcomponent。 下图显示了弹出窗口的示例: 弹出窗口示例

这是我尝试在标记上添加弹出窗口的代码:

var card = <Card />
var popup = new mapboxgl.Popup({ offset: 25 })
.setDOMContent(ReactDOM.render(card, document.getElementById('map')))

var marker = new mapboxgl.Marker(el)
.setLngLat(coordinates)
.setPopup(popup)
.addTo(map);
setMarkers(markers => [...markers, marker])

我一直收到相同的错误:

Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'.

请帮帮我!

1个回答

setDOMContent 的预期参数类型为 Node ,但 ReactDOM.render 的返回类型为 Component
https://reactjs.org/docs/react-dom.html#render
https://docs.mapbox.com/mapbox-gl-js/api/markers/#popup#setdomcontent

在 React 中,使用 React.useRef.current 来引用 dom 内容。
https://reactjs.org/docs/hooks-reference.html#useref

const popupRef = React.useRef(null);
const popup = new mapboxgl.Popup({ offset: 25 })
  .setDOMContent(popupRef.current);

return (
  <>
    <div id="map"></div>
    <div ref={popupRef}>popup</div>
  </>
);
Jun Koyama
2020-11-10