#react-native
#react-native
Вопрос:
Я пытаюсь скрыть дочерний компонент при нажатии аппаратной клавиши возврата.
Это то, что я делал до сих пор:
render(){
return(
<View >
<TouchableOpacity onPress={()=> this.onTypePress('cuisine')}>
<Text>Cuisines</Text>
</TouchableOpacity>
{this.renderFilterType()}
</View>
);
}
renderFilterType(){
if(this.props.showFilterByType){
return <FilterByType />
}
}
this.props.showFilterByType — это логическое значение, которое я устанавливаю с помощью Redux.
onTypePress запустит состояние в состоянии Redux.
Я передаю нажатие кнопки «Назад» следующим FilterByType
образом :
constructor(props){
super(props)
this.handleBackButtonClick= this.handleBackButtonClick.bind(this)
}
handleBackButtonClick(){
this.props.hideFilterByType(' ')
BackHandler.removeEventListener('hardwareBackPress', this.handleBackButtonClick);
}
componentDidMount(){
BackHandler.addEventListener('hardwareBackPress',
this.handleBackButtonClick);
}
Когда я нажимаю кнопку «Назад», он возвращается к предыдущей кнопке, но через секунду он также закрывает приложение (первый экран).
И когда я удаляю BackHandler.removeEventListener('hardwareBackPress', this.handleBackButtonClick);
из FilterByType.js , Кнопка «Назад» перестает работать во всем приложении.
Любое предложение, где я делаю неправильно, пожалуйста ??!!
Комментарии:
1. Являются ли прослушиватели событий кнопки «Назад» только для ваших дочерних компонентов?
2. да! только на моих дочерних компонентах @JRK
3. Итак, при втором нажатии (когда ваш дочерний компонент размонтирован) у вас нет прослушивателей кнопок «Назад»? Я предполагаю, что вы не хотите выходить из приложения?
4. Да! Кстати, я смог это решить. Проверьте мой ответ, если он удовлетворяет. @JRK
Ответ №1:
Из документации React-native BackHandler :
Android: обнаружение аппаратных нажатий кнопки «Назад» и программный вызов функции кнопки «Назад» по умолчанию для выхода из приложения, если нет слушателей или если ни один из слушателей не возвращает true.
Поэтому я отредактировал handleBackButtonClick() для этого :
handleBackButtonClick(){
this.props.hideFilterByType(' ')
BackHandler.removeEventListener('hardwareBackPress',this.handleBackButtonClick);
return true
}