【发布时间】:2018-08-06 21:28:15
【问题描述】:
我这里有一些有趣的案例! 我在 react-leaflet 标记弹出窗口中使用 react-input-range
是这样的:
import React from 'react';
import { Map as LeafletMap, Marker, Popup, TileLayer } from 'react-leaflet';
import InputRange from 'react-input-range';
export default class MapPage extends React.Component {
constructor(props) {
super(props);
this.state = {
value: { min: 2, max: 200 },
name: 'sample name',
};
}
render() {
return (
<div>
{/*
* This input range outside LeafletMap works
*/}
<InputRange
maxValue={300}
minValue={0}
value={this.state.value}
onChange={value => this.setState({ value })}
/>
<LeafletMap center={[0, 0]} zoom={16}>
<TileLayer
attribution="© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors"
url="http://{s}.tile.osm.org/{z}/{x}/{y}.png"
/>
<Marker position={[0, 0]}>
<Popup>
{/*
* This input below works
*/}
<input
value={this.state.name}
onChange={({ target }) => this.setState({ name: target.value })}
/>
{/*
* This input range INSIDE LeafletMap does not work
*/}
<InputRange
maxValue={300}
minValue={0}
value={this.state.value}
onChange={value => this.setState({ value })}
/>
</Popup>
</Marker>
</LeafletMap>
</div>
);
}
}
到目前为止我所知道的
-
input range组件在LeafletMap组件之外工作。 - 原生输入在
LeafletMap组件内工作! - 我已确认本机输入在弹出窗口中有效!
input range适用于移动设备(Android chrome 浏览器)! (滑动和点击事件)
任何想法如何使输入范围在 react-leaflet 映射中工作?
这里有一些可能会有所帮助的详细信息:
- 反应传单:^2.0.0-rc.3
- 反应:16.4.2
- 反应输入范围:^1.3.0
测试环境
浏览器:Chrome 64.0.32、Firefox 61 和 Safari 11.1
操作系统:Mac OSX High Sierra 10.13.5
Codepen:https://codepen.io/codepen-theo/pen/OwdLXY?editors=0010
【问题讨论】:
-
是否有任何控制台错误?另外,您是否尝试过使用此工具调试道具? chrome.google.com/webstore/detail/react-developer-tools/…
-
没有错误匹配,并且事件根本没有被触发。我正在使用 github.com/react-boilerplate/react-boilerplate 和 github.com/evgenyrodionov/redux-logger,因为 react-dev 工具不能很好地与样板 @dkniffin 配合使用
-
它是否适用于多个 InputRange?这个库似乎做了一些非常令人困惑的事情来附加和销毁文档节点上的事件侦听器。我怀疑组件的实例可能会干扰其他 InputRange 组件的全局事件侦听器。
-
嗨@HåkenLid,我尝试同时添加2个输入范围(地图外),两者都有效。这是否澄清了你的一些假设?
-
是的。但我怀疑问题可能与 react-input-range 处理事件的方式有关。它需要将事件侦听器附加到文档节点,但是对于传单,使用反应门户和 iframe 会发生一些复杂的事情。所以我的猜测是,在这种情况下,输入范围所做的一些假设是不正确的。您可以链接到代码笔或类似内容中的代码运行示例吗?这两个库的具体组合可能并不常见。
标签: javascript reactjs leaflet react-leaflet react-component