【问题标题】:How do I get the key or coordinates of a Marker in react-native-maps in onPress?如何在 onPress 的 react-native-maps 中获取标记的键或坐标?
【发布时间】:2017-02-14 02:16:08
【问题描述】:

我正在使用react-native-maps 来渲染带有多个标记的 MapView。当用户单击标记时,我想执行一些动作和动画。为此,我将一个函数(例如,onMarkerPress)绑定到每个标记的 onPress。我遇到的问题是我无法弄清楚如何找出触发该功能的标记。有没有办法获得对标记/识别关键道具的引用?即使是坐标也可以,因为我可以使用它们来查找标记。

【问题讨论】:

    标签: javascript events react-native react-native-maps


    【解决方案1】:

    我找到了两种方法来做到这一点。 很可能第一个是最佳选择:

    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));
    }
    

    在我的例子中 this.state.marker 是一个像这样的对象:

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

    2。从事件信息中提取您需要的信息,如下所示:

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

    并与:

    _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);
    }
    

    或使用箭头功能。当我写答案时,我对此一无所知。

    【讨论】:

    • 你确定第二种方法吗?通读问题后,我看到了相同的建议。但是,当我尝试它时,坐标只是让我不确定,就像others reported here 一样。至于第一种方法,今天早上我也想出了办法,因为我没有看到答案。所以它肯定有效。我仍然很好奇为什么我不能得到坐标。
    • 我测试了第二种方法,效果很好。试试 _onMarkerPress (mkr) { console.warn(Object.keys(mkr)); }。这就是我找到第二种方法的方法。
    • nativeEvent 在那里,但其中唯一的键是 id、action 和 target。你使用的是什么版本的 react-native-maps?我在 0.13.0 上,因为它是唯一适用于 React Native >= 0.40 的版本。也许这个版本有一个重大的回归?
    • 我有“依赖”:{“react”:“15.4.2”,“react-native”:“0.41.2”,“react-native-maps”:“^0.12.4 " }
    • 好的,今天有时间设置一个使用 0.12.4 的工作环境,并且能够确认坐标是该版本中的一个键。所以看起来 0.13.0 有一个主要的回归,这意味着我应该降级我的 react-native 和 react-native-maps 版本,或者我使用列出的第一个解决方案。感谢您的帮助。
    猜你喜欢
    • 2017-10-23
    • 2020-06-07
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多