here-api - H.ui.Control 与 React
问题描述
我正在寻找使用 H.ui.Control 添加一个反应元素。这可能吗?怎么做?
// sudo code of what I did
componentDidMount() {
...
let button = new H.ui.Control(this.myButtonControl);
button.setPosition('top-left');
this._ui.addControl('button-control', button);
...
}
myButtonControl() {
return <button className="H_btn">Hello World</button>
}
一个新的<div class="H_ctl"></div>
, 出现在控件应该在的位置,但不是按钮。
解决方案
虽然这不是我想要做的,但我确实找到了解决方案。我创建了一个扩展的泛型类H.ui.Control
,在本例中为 ButtonGroupControl。
class ButtonGroupControl extends H.ui.Control {
constructor(buttons: []) {
super();
this._buttons = buttons;
this.addClass('H_grp');
}
renderInternal(el, doc) {
this._buttons.forEach((button, i) => {
let btn = doc.createElement('button');
btn.className = 'H_btn';
btn.innerText = this._buttons[i].label;
btn.onclick = this._buttons[i].callback;
el.appendChild(btn);
})
super.renderInternal(el, doc);
}
}
export default ButtonGroupControl;
然后,在我的地图组件中,我创建了传递给控件的项目数组,如下所示:
const mapToolsControl: ButtonGroupControl = new ButtonGroupControl([
{
label: 'Add Field',
callback: () => {
console.log('callback: adding field');
}
},
{
label: 'Remove Field',
callback: () => {
console.log('callback: remove field');
}
}
]);
最后,我将控件添加到地图中,例如:
this._map.addControl('map-tools-control', mapToolsControl);
这导致以下结果(这是一个链接,因为我还没有足够的点来嵌入): 结果的屏幕截图
推荐阅读
- java - Spring Boot 2.5 升级覆盖或替换我的 SpringBootTest 配置实例
- multiple-databases - Hasura 在通过控制台添加新数据库时是否会创建元数据信息?
- javascript - 在 Django 中,如何在 div 内的网页中显示 html 文件?
- python - 如何将对象 A 中的对象 B 的值作为对象 A 的属性公开给用户?
- powershell - 在 Pester 的所有测试中模拟一个函数?
- react-native - null 不是对象(评估 't().store') - React Native Expo
- python - 如何连接按钮以调用 Python 类 GUI?
- python - 为什么曲线不是由 python 中的分割范围绘制的?
- javascript - 在 Wordpress 中使用滚动和变换移动图像
- php - 如果延迟加载不好,为什么不禁用它呢?