【问题标题】:React native: how to get markers update on map?React Native:如何在地图上更新标记?
【发布时间】:2021-04-06 07:16:43
【问题描述】:

我有一类地图,我从数据库中获取标记并将它们映射到地图屏幕上。 我正在尝试显示在 DB 中发生更改但仅在我刷新应用程序时才会起作用的新标记。

部分代码:

componentDidMount() {
   
   ... 
})
// get markers from DB
    markerRef.get()
    .then(querySnapshot => {
      // console.log('Total users: ', querySnapshot.size);
      const markers = [];
      // if(querySnapshot)
      querySnapshot.forEach(res => {
        const {title, info, latitude, longitude, imageUri} = res.data()
        markers.push({
          latitude,
          longitude,
          title,
          info,
          imageUri,
          id: res.id
        })
      });
      this.setState({
        markers,
      })
    });
    

  }

在我的渲染中,我映射了标记:

  this.state.markers.map(marker => (
          //  <<<<~~~~ I think those 2-3 lines are matter
          <MapView.Marker
            key={marker.id}
            coordinate={{longitude: marker.longitude, latitude: marker.latitude}}
            onPress={(e)=>this.onMarkerPress(e, marker)} //
            >
            
              <MapView.Callout tooltip
                      onPress={() => this.setState({infoModal: 'true', markerUrl: marker.imageUri})}
              
              >
                <View style={{backgroundColor: 'white'}} >
                      <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}> 
                        {/* {marker.imageUri &&  <Image source = {{uri:marker.imageUri}} //{{uri: marker.imageUri}}
                        style = {{ width: '90%', height: 200, justifyContent: 'center', flex: 1,}}
                        resizeMode="center"
                      /> }         */}
                      </View>
                    <Text>Lat: {marker.latitude}, Lon: {marker.longitude}</Text>
                    <Text>{marker.email}</Text>
                    <TouchableOpacity onPress={() => this.setState({infoModal: 'true', markerUrl: marker.imageUri})}>
                      <Text style={{color: 'blue'}}> info </Text>
                    </TouchableOpacity>
                </View>
              </MapView.Callout>         
          </MapView.Marker>
        ))
      }

我的问题是当我更新数据库中的标记时(例如添加标记/设置可见 - 将道具状态更改为可见)它不会在地图上刷新,仅在我再次打开应用程序后才会显示。

有什么方法可以刷新它,所以在我进行一些更改后它会在地图上呈现?

【问题讨论】:

    标签: react-native react-native-maps


    【解决方案1】:

    那是因为您仅在安装组件时才从数据库中获取标记,因为您正在调用componentDidMount 中的数据获取方法。因此,这将无法捕获对数据库的后续更改,这些更改只会在您重新加载这些组件时反映出来,这会在您“再次打开应用程序”时发生。

    您可以研究的是用onSnapshot 替换get 以实例化一个侦听器,该侦听器将在数据库更新时调用:https://firebase.google.com/docs/firestore/query-data/listen

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 2021-09-10
      • 2019-02-04
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 2022-08-03
      相关资源
      最近更新 更多