2017-05-30 15 views
2

私はそれにカスタム変数を追加できるように反応リーフレットコンポーネントを拡張しようとしています。React-leafletのカスタムコンポーネント、リーフレットからポリラインを拡張する方法は?

ポリラインに「id」を追加する必要があります(ユーザーがクリックするとIDを取得し、サーバーコールを呼び出してデータを収集できます)。私はマーカーのために同じことをしなければならなかったし、この回避策を見つけた:

markers = nextProps.buses.map((bus, i) => { 
    let iconCustom = new L.Icon.Default({internalId: bus.internalId}); 
    this.markersDirectAccess[bus.internalId] = { 
    ...bus 
    }; 

    return { 
    lat: bus.latitude, 
    lng: bus.longitude, 
    popup: bus.busId, 
    options: {icon: iconCustom} 
    } 
}); 

私はそれを行うには正しい方法だ場合、完全にはわかりません。しかし、Polylineコンポーネントについては私は立ち往生していません。 私はthis answerを見つけました。反応小冊子にそれを適用したいのですが、どうすればいいのか分かりません。これは私の拡張コンポーネントの現在の状態です:

import L from 'leaflet' 
import { Polyline } from 'react-leaflet' 
import PropTypes from 'prop-types'; 


export default class PolylineCustomId extends Polyline { 
    static propTypes = { 
    positions: PropTypes.array, 
    } 

    createLeafletElement (props: Object): Object { 
    return L.Polyline(props) 
    } 
} 

答えて

1

私はあなたのためにカスタムコンポーネントが必要と思わないです。 IDを返すポリラインごとにクリックハンドラを追加するだけで済みます。トリックをしたhttps://jsfiddle.net/31euue73/1/

+0

:実施例とjsfiddleがあり、ここで

render() { const position = [this.state.lat, this.state.lng] return ( <Map center={position} zoom={this.state.zoom}> <TileLayer attribution='&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors' url='http://{s}.tile.osm.org/{z}/{x}/{y}.png' /> {this.state.polylines.map(polyline => <Polyline key={polyline.id} positions={polyline.coords} onClick={() => alert('clicked ' + polyline.id)} /> ) } </Map> ) } 

をそして、この例を参照してください!私はまだ反応リーフレットと反応ライフサイクルを使用してリーフレットのコンポーネントを拡張する方法を疑問に思うが、それは動作して以来、これを答えとして受け入れる:) – Clafou

関連する問題