Ваш Map
компонент будет перерисован, когда его реквизит и состояние изменится
Добавить переменную состояния в родительский компонент
this.state = {
isMarkerVisible: false // Set this to your default value
}
Теперь добавьте функцию, которая будет устанавливать переменную состояния
onPress = isMarkerVisible => {
this.setState({
isMarkerVisible
});
}
И, наконец, измените ваше onPress
событие на ваших кнопках
// Green
<TouchableOpacity
onPress={() => this.onPress(false)}
/>
// Brown
<TouchableOpacity
onPress={() => this.onPress(true)}
/>
Измените ваш Map
компонент так, чтобы он принимал isMarkerVisible
проп, значение которого this.state.isMarkerVisible
<Map
...props
isMarkerVisible={this.state.isMarkerVisible}
/>
Теперь внутри вашего Map
компонента вам нужно изменить логику рендеринга, вот несколько псевдокодов ниже. Вы не добавили Map
код, поэтому я не могу помочь с подробностями.
If this.props.isMarkerVisible
Then render the marker
Else do not render the marker
Обновление для отражения вопроса
Вы можете сделать следующее в вашем Map
компоненте. Вам не нужно изменять состояние, просто используйте опору, которая передается.
renderMarker = (coordinates) => {
const { isMarkerVisible } = this.props;
if(!isMarkerVisible) return null;
return (
<Marker
ref={(mark) => { this.marker = mark; }}
coordinate={{ latitude, longitude }}
pinColor={colors.primaryColor}
image={require('../../../../assets/circle.png')}
/>
)
}
render() {
const coordinates = { latitude: 0, longitude: 0 }
return (
<View>
{ this.renderMarker(coordinates) }
</View>
)
}