OpenLayers-使用ol/control/control比定义定制控件有什么好处?

OpenLayers-使用ol/control/control比定义定制控件有什么好处?,openlayers,openlayers-6,Openlayers,Openlayers 6,在OpenLayers中创建“控件”(即覆盖地图并在单击时执行操作的按钮)时,我可以想到至少两种实现此目的的方法: 提供您自己的DOM元素,并直接与Map对象交互 这是我目前的做法。在我目前正在开发的一个网站上,右上角有两个小按钮。这些按钮打开包含DOM组件树和逻辑的侧菜单,用于通过对OpenLayers贴图对象的引用与贴图交互 此map引用可供通过渲染道具模式包装OpenLayers库的组件的所有子组件使用: class MyMap extends Component { // Const

在OpenLayers中创建“控件”(即覆盖地图并在单击时执行操作的按钮)时,我可以想到至少两种实现此目的的方法:

提供您自己的DOM元素,并直接与Map对象交互 这是我目前的做法。在我目前正在开发的一个网站上,右上角有两个小按钮。这些按钮打开包含DOM组件树和逻辑的侧菜单,用于通过对OpenLayers贴图对象的引用与贴图交互

map
引用可供通过渲染道具模式包装OpenLayers库的组件的所有子组件使用:

class MyMap extends Component {
  // Constructor/lifecycle methods/etc.
  this.map = new Map(...)
  ...
  render() {
    return (
      <>
        <div ref={this.mapRef} />
        {this.props.children({map: this.map})}
      </>
    )
  }
}
使用OpenLayers ol/control/control类 我从中看到,通过定义额外的
控件
也可以向地图添加按钮。据我所知,这个例子展示了如何定义要添加到映射中的DOM元素,以及如何编写EventHandler(在本例中单击),使您能够以自己喜欢的方式与映射交互。这与我最初使用的方法基本相同

问题: 使用
ol/control/control
定义地图控件与不使用此API相比有什么好处吗?我想不出不立即使用
控件
类有什么缺点(实际上……使用React,我可以考虑不直接与DOM交互的原因,除非我真的需要,以及可能从父组件与map对象交互)。虽然我使用的是OpenLayers 6,但我认为在这种情况下版本并不重要

<MyMap>
{({map}) => (
  <>
    {/* Each of these renders a button and other DOM elements */}
    <Component1ThatUsesTheMap map={map} />
    <Component2ThatUsesTheMap map={map} />
    <Component3ThatUsesTheMap map={map} />
  </>
 )}
</MyMap>