reactjs 如何在React原生Map中更改标记位置?

pu82cl6c  于 2022-11-04  发布在  React
关注(0)|答案(1)|浏览(219)

你好我想在Map上添加一个可拖动的标记“根据Map视图更改标记的位置”所以我使用react-native-maps,
当用户滑动Map并改变他的位置时,标记会跟随在我的代码后面,所以我在控制台中记录了它,但是我在日志中看不到任何东西,或者它不是这样做的!我怎么才能使它在Map上可拖动呢?
下面是我想要实现x1c 0d1x
这是我代码

import React, {Component} from 'react';
import {StyleSheet, View} from 'react-native';
import MapView, {Marker} from 'react-native-maps';

// create a component
class App extends Component {
  state = {
    latlng: {
      latitude: 35.1790507,
      longitude: -6.1389008,
    },
  };
  render() {
    return (
      <View style={styles.container}>
        <MapView
          style={styles.map}
          region={{
            latitude: 35.1790507,
            longitude: -6.1389008,
            latitudeDelta: 0.015,
            longitudeDelta: 0.0121,
          }}>
          <Marker
            draggable
            coordinate={this.state.latlng}
            title="Home"
            onDragEnd={e => {
              console.log('dragEnd', e.nativeEvent.coordinate);
            }}
          />
        </MapView>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    ...StyleSheet.absoluteFillObject,
    // height: 400,
    // width: 400,
    justifyContent: 'flex-end',
    alignItems: 'center',
  },
  map: {
    ...StyleSheet.absoluteFillObject,
  },
});

//make this component available to the app
export default App;
mm9b1k5b

mm9b1k5b1#

您可以使用MapViewonRegionChangeComplete属性来达成此目的。
首先,更改状态对象,如下所示:

state = {
    markerData: {
      latitude: 35.1790507,
      longitude: -6.1389008,
    },
    mapData: {
      latitude: 35.1790507,
      longitude: -6.1389008,
      latitudeDelta: 0.015,
      longitudeDelta: 0.0121,
    },
  };

相应地更改您的MapView

<MapView
     style={{flex: 1}}
     region={this.state.mapData}
     onRegionChangeComplete={this.handleRegionChange}>
     <Marker
        coordinate={this.state.markerData}
        title="Home"
        onDragEnd={e => {
              console.log('dragEnd', e.nativeEvent.coordinate);
            }}
      />
</MapView>

然后定义一个处理函数,当用户在Map上拖动时,该函数将更改状态值:

handleRegionChange = mapData => {
    this.setState({
      markerData: {latitude: mapData.latitude, longitude: mapData.longitude},
      mapData,
    });
  };

希望这对你有帮助。

相关问题