答案 0 :(得分:3)
for(int index = 0; index < inputChars.Length; index++)
{
char toBeSubbed = inputChars[index];
int letterIndex = Array.IndexOf(alphabet, toBeSubbed);
if(letterIndex>0)
inputChars[index] = charsToSubArr[letterIndex];
}
的引入带来了creating custom components方面的重大变化,不再支持通过继承扩展组件(请参考this thread详情)
实际上,React official documentation也建议使用合成代替继承:
在Facebook,我们在成千上万的组件中使用React,但我们尚未 发现了建议使用组件的任何用例 继承层次结构。
道具和构图为您提供了所需的所有灵活性 以明确且安全的方式自定义组件的外观和行为。 请记住,组件可以接受任意道具,包括 基本值,React元素或函数。
下面的示例演示如何扩展标记组件,以便在显示标记后保持弹出窗口的打开状态:
react-leaflet version 2
说明:
获得对本机传单标记对象(const MyMarker = props => {
const initMarker = ref => {
if (ref) {
ref.leafletElement.openPopup()
}
}
return <Marker ref={initMarker} {...props}/>
}
的访问权限,并通过Marker.openPopup
method打开弹出窗口
答案 1 :(得分:2)
以上不再适用于 react-leaflet 版本 3。在您的自定义标记组件中,要获取对传单元素的引用,您现在应该使用 useRef()
,然后在 useEffect()
中打开弹出窗口一旦安装了组件。
const MyMarker = (props) => {
const leafletRef = useRef();
useEffect(() => {
leafletRef.current.openPopup();
},[])
return <Marker ref={leafletRef} {...props} />
}
答案 2 :(得分:1)
您可以使用永久tooltips,或者React可以为此类事情提供引用...您可以执行以下操作:
https://jsfiddle.net/jrcoq72t/121/
const React = window.React
const { Map, TileLayer, Marker, Popup } = window.ReactLeaflet
class SimpleExample extends React.Component {
constructor () {
super()
this.state = {
lat: 51.505,
lng: -0.09,
zoom: 13
}
}
openPopup (marker) {
if (marker && marker.leafletElement) {
window.setTimeout(() => {
marker.leafletElement.openPopup()
})
}
}
render () {
const position = [this.state.lat, this.state.lng]
return (
<Map center={position} zoom={this.state.zoom}>
<TileLayer attribution='© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors' url="http://{s}.tile.osm.org/{z}/{x}/{y}.png" />
<Marker position={position} ref={this.openPopup}>
<Popup>
<span>
A pretty CSS3 popup. <br /> Easily customizable.
</span>
</Popup>
</Marker>
</Map>
)
}
}
window.ReactDOM.render(<SimpleExample />, document.getElementById('container'))
参考文献:
https://reactjs.org/docs/refs-and-the-dom.html