Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在本机映射中切换映射类型_Android_Ios_React Native_React Native Maps - Fatal编程技术网

Android 在本机映射中切换映射类型

Android 在本机映射中切换映射类型,android,ios,react-native,react-native-maps,Android,Ios,React Native,React Native Maps,我在IOS和Android上都使用谷歌的react本地地图。 有没有办法在react native expo应用程序中启用像谷歌地图应用程序那样的mapType图层切换器?以便用户可以切换地图类型(标准、卫星等) 代码的简化版本 constructor(props) { super(props); this.state = { mapRegion: null, markers: [], mapType: null }; } switchMapType() {

我在IOS和Android上都使用谷歌的react本地地图。 有没有办法在react native expo应用程序中启用像谷歌地图应用程序那样的
mapType
图层切换器?以便用户可以切换地图类型(标准、卫星等)

代码的简化版本

constructor(props) {
  super(props);
  this.state = {
    mapRegion: null,
    markers: [],
    mapType: null
  };
}

switchMapType() {
  console.log('Changing');
  this.state.mapType = 'satellite'
}

render() {
  return (
    <MapView
      provider="google"
      mapType={this.state.mapType}
    >
      <Icon
        onPress={this.switchMapType} 
      />
    </MapView>
  );
}
构造函数(道具){
超级(道具);
此.state={
mapRegion:null,
标记:[],
映射类型:null
};
}
switchMapType(){
console.log('Changing');
this.state.mapType='satellite'
}
render(){
返回(
);
}

当我在状态中
switchMapType()

查看文档时,我得到一个未定义的错误。它可以很简单,只需将正确的样式传递给
mapType
属性

要显示的地图类型

  • 标准:标准路线图(默认)
  • 无:无地图
  • 卫星:卫星视图
  • 混合:覆盖道路和兴趣点的卫星视图
  • 地形:(仅限Android)地形视图
  • 静音标准:更加微妙,使标记/线条更加突出(仅限iOS 11.0+版本)
绑定你的函数 您之所以会出现此错误,是因为可能需要绑定函数,以便它知道要使用的
this
的值。您可以在构造函数中执行此操作,方法是将以下内容放入构造函数中

constructor(props) {
  ...
  this.switchMapType = this.switchMapType.bind(this);    
  ...
}
或者,您可以通过将其声明更改为,将
switchMapType
转换为箭头函数

switchMapType = () => {
  ...
}
或者可以在调用函数时绑定它

<Icon
  onPress={this.switchMapType.bind(this} 
/>
如果您希望能够在
卫星版
标准版
之间切换,可以执行以下操作。这使用三元语句来处理
if/else


我用一些代码和我得到的错误更新了这个问题。这是我的想法,但似乎不起作用。也许需要一个全球国家?太好了,我在错误的上下文中使用了“this”。我确实计算了“设置状态”。我很高兴它现在为您排序:)
switchMapType = () => {
  console.log('changing');
  this.setState({ mapType: 'satellite' });
}
switchMapType = () => {
  console.log('changing');
  this.setState({ mapType: this.state.mapType === 'satellite' ? 'standard' : 'satellite' });
}