2017-02-14 6 views
1

Я использую react-native-maps для визуализации MapView с несколькими маркерами. Я хочу выполнить некоторые действия и анимации, когда пользователь нажимает на маркер. Для этого я привязываю функцию (например, onMarkerPress) к каждому маркеру onPress. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу понять, как узнать, какой маркер запускает функцию. Есть ли способ получить ссылку на маркер/идентификационный ключ? Даже координаты будут делать, поскольку я могу использовать их для поиска маркера.Как получить ключ или координаты маркера в реакционных картах в onPress?

ответ

3

Я нашел 2 способа сделать это. Скорее всего, первый из них является лучшим выбором:

1. Пропустите информацию вам нужно о маркер в качестве второго аргумента связываются с _onMarkerPress, как показано ниже:

render() { 

    return (
     <View> 
      <Text>MySupaFancyMap</Text> 
      <MapView 
       style={styles.map} 
       region={this.state.region} 
       onRegionChangeComplete={this._onRegionChangeComplete.bind(this)} 
      > 
       <MapView.Marker 
        coordinate={this.state.marker.latlng} 
        title={this.state.marker.title} 
        description={this.state.marker.description} 
        onPress={this._onMarkerPress.bind(this, this.state.marker)} 
       /> 
      </MapView> 
     </View> 
    ); 
} 
_onMarkerPress (markerData) { 
    alert(JSON.stringify(markerData)); 
} 

В моем случае это .state.marker является объектом, как это:

 { 
      latlng: { 
       latitude: REGION.latitude, 
       longitude: REGION.longitude 
      }, 
      title:'MyHouse', 
      weather: '26 Celsius' 

     } 

2. экстракт информацию вам нужно от информации события, как это:

<MapView.Marker 
     coordinate={this.state.marker.latlng}   
     onPress={this._onMarkerPress.bind(this)} 
/> 

и с:

_onMarkerPress (mkr) { 
    console.warn(mkr.nativeEvent.coordinate); 
} 

Я определенно пойти с первым раствором. Подробнее о маркерах здесь: https://github.com/airbnb/react-native-maps/blob/master/docs/marker.md

Примечание: как лучшая практика это рекомендуется не привязок в процессе визуализации. Лучшими решениями являются их добавление в конструктор:

constructor (props) { 
    super(props); 
    this._onMarkerPress = this._onMarkerPress.bind(this); 
} 

или использовать функцию стрелки. Когда я написал ответ, я не знал об этом.

+0

Вы уверены, что этот второй метод? После прочтения вопросов я увидел то же предложение. Однако координация просто дает мне неопределенное, когда я пытаюсь это сделать так же, как [другие сообщения здесь] (https://github.com/airbnb/react-native-maps/issues/580). Что касается первого метода, я понял, как это сделать сегодня утром, так как не видел ответа. Так что это определенно работает. Мне все еще интересно, почему я не могу получить координаты. –

+0

Я тестировал второй метод, и он отлично работал. Попробуйте _onMarkerPress (mkr) { console.warn (Object.keys (mkr)); }. Вот как я нашел второй метод. –

+0

nativeEvent есть, но единственными ключами внутри него являются id, action и target. Какую версию адаптивных карт вы используете? Я нахожусь на 0.13.0, так как это единственный, который работает с React Native> = 0.40. Возможно, существует большая регрессия в этой версии? –

 Смежные вопросы

  • Нет связанных вопросов^_^