Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.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
Reactjs 如何在不重新渲染mapview的情况下更新标记位置?反应本机映射_Reactjs_React Native_React Native Maps - Fatal编程技术网

Reactjs 如何在不重新渲染mapview的情况下更新标记位置?反应本机映射

Reactjs 如何在不重新渲染mapview的情况下更新标记位置?反应本机映射,reactjs,react-native,react-native-maps,Reactjs,React Native,React Native Maps,我正在根据标记数组状态更新多个标记位置。所以当我用setState更新它时,渲染函数会像往常一样触发,mapview会重新渲染。因为它有一个初始区域和区域道具,所以它会根据玩家位置状态自动关注玩家位置(我不想要这个,我只想要在初始加载时) 如何在不重新渲染mapview的情况下更新标记位置 render() { return ( <MapView initialRegion={this.state.playerLocation} reg

我正在根据标记数组状态更新多个标记位置。所以当我用setState更新它时,渲染函数会像往常一样触发,mapview会重新渲染。因为它有一个初始区域和区域道具,所以它会根据玩家位置状态自动关注玩家位置(我不想要这个,我只想要在初始加载时)

如何在不重新渲染mapview的情况下更新标记位置

 render() {
    return (
      <MapView
        initialRegion={this.state.playerLocation}
        region={this.state.playerLocation}
        style={ styles.map }>
          {this.renderMarkers()}
       </MapView>
    );
  }

renderMarkers = () => {
  return(
    this.state.markers.map(marker=>{
      return(
        <Marker coordinate = {{
           latitude: marker.lat,
           longitude: marker.long
         }}      
         title={marker.id}/>
      )
  })
}
render(){
返回(
{this.renderMarkers()}
);
}
渲染标记=()=>{
返回(
this.state.markers.map(marker=>{
返回(
)
})
}

这是react中一个非常常见的问题,有一个非常好的解决方案

使用名为
shouldComponentUpdate

您可以尝试将渲染标记提取到单独的组件,然后添加生命周期以始终返回False。即,一旦安装组件,它将不会再次重新渲染


我不确定这是否会导致您的情况出现任何倒退,但如果出现倒退,您可以传递一个道具,该道具可以触发SCU中的重新渲染,并在需要时更新标记。这是您需要处理的问题。

这是react中非常常见的问题,并且有一个非常好的解决方案

使用名为
shouldComponentUpdate

您可以尝试将渲染标记提取到单独的组件,然后添加生命周期以始终返回False。即,一旦安装组件,它将不会再次重新渲染

我不确定这是否会导致您的情况出现任何倒退,但如果出现倒退,您可以传递一个道具,该道具可以触发SCU中的重新渲染,并在需要时更新标记。这是您需要使用的