В какой-то момент, если вы захотите изменить то, что видно на вашем компоненте в реакции, нет другого пути, кроме как перерисовать ваш компонент.
Я не знаю react-native-maps
, но я думаю, что эту проблему можно решить с помощью знаний об общих реакциях.
Маркеры и полигоны в react-native-maps
добавляются как дочерние элементы MapView
, поэтому в зависимости от того, как вы храните свои маркеры / линии, вы можете просто полагаться на состояние реакции или изменения реквизита для обновления * 1008. *.
Например, если ваши маркеры хранятся в состоянии вашего компонента, вы можете сделать что-то вроде этого:
class MyLocationTracker extends React.Component {
state = { markers: [{ latlng: { latitude: 1, longitude: 1 } }] }
render = () => {
return (
<View>
<Text onPress={() => this.setState({ markers: [] })}>Reset markers</Text>
<MapView>
{this.state.markers.map((marker) => <Marker coordinate={marker.latlng} />)}
</MapView>
</View>
)
}
}
Когда state
изменится, реакция снова вызовет функцию render()
и обновит маркеры. Обратите внимание, что это также приведет к поиску компонента <MapView />
.
Если вы хотите избежать перерисовки компонента <MapView />
, вы можете переместить логику в новый компонент, который будет обрабатывать только маркеры, например:
class MyLocationTracker extends React.Component {
render = () => {
return (
<View>
<Text onPress={this.markers.reset}>Reset markers</Text>
<MapView>
<MyMarkers ref={(comp) => { this.markers = comp }} />
</MapView>
</View>
)
}
}
class MyMarkers extends React.Component {
state = { markers: [{ latlng: { latitude: 1, longitude: 1 } }] }
reset = () => {
this.setState({ markers: [] })
}
render = () => {
return (
<View>
{this.state.markers.map((marker) => <Marker coordinate={marker.latlng} />)}
</View>
)
}
}
Опять же, изменения в состоянии приведут к повторному отображению вашего компонента. Но теперь, поскольку меняется только состояние <MyMarkers />
, он будет перерисовываться сам, но не что-либо еще.
Надеюсь, это поможет:)