我正在基于标记数组状态更新多个标记位置。所以当我用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}
/>
)
})
)
}
这是反应中非常常见的问题,并且有一个非常好的解决方案。
使用名为shouldComponentUpdate
的生命周期方法
https://reactjs.org/docs/react-component.html#shouldcomponentupdate
您可以尝试将渲染标记提取到单独的组件,然后添加lifeCycle以始终返回False。这是一旦安装了组件,它就不会再次重新渲染。
我不确定这是否会导致您的情况出现任何回归,但如果确实如此,您可以传递一个可以触发SCU重新渲染的道具,并在需要时更新标记。这是你需要玩的东西。