В текущей версии, которую я установил (3.35.0), есть возможность назначить пользовательский backButtonHandler
для Router
. Хотя это полезно, моему приложению требуется индивидуальное поведение на определенных экранах.
В предыдущей версии у меня был глобальный прослушиватель событий BackAndroid
, который получает компонент, который в данный момент находится на переднем плане, из стека навигации с помощью Actions.currentRouter.stack
. В цепочке прототипов компонента у меня был метод onBackButton()
, который обрабатывает настраиваемое поведение.
В новом API действий не отображается currentRouter. Я могу addEventListener
в каждом компоненте и removeEventListener
в componentWillUnmount
. Но есть ли более чистый способ добиться этого?
Если нет, я предлагаю, чтобы мы либо:
backButtonHandler
в API Scene
.Что вы ребята думаете?
удалил содержимое этого поста, сделал отдельный выпуск для You are already in the root scene
и поместил его туда.
Эй, у меня та же проблема, и кажется, что удаление обработчика событий с помощью метода componentWillUnmount не работает с этой библиотекой, вы нашли какое-либо другое решение?
Вы должны обновить RN до 0.32.
С этим у вас может быть глобальный обработчик для большинства сцен. Для этих специальных сцен вы можете добавить в них BackAndroid.addEventListener('hardwareBackPress', this.handleAndroidBack)
, RN сначала вызовет более поздний обратный вызов прослушивателя, глобальный обработчик не будет вызываться, если вы return true
в более позднем обратном вызове прослушивателя. Я думаю, что это лучшее решение. Просто не забудьте удалить обратный вызов слушателя.
Самый полезный комментарий
Вы должны обновить RN до 0.32.
С этим у вас может быть глобальный обработчик для большинства сцен. Для этих специальных сцен вы можете добавить в них
BackAndroid.addEventListener('hardwareBackPress', this.handleAndroidBack)
, RN сначала вызовет более поздний обратный вызов прослушивателя, глобальный обработчик не будет вызываться, если выreturn true
в более позднем обратном вызове прослушивателя. Я думаю, что это лучшее решение. Просто не забудьте удалить обратный вызов слушателя.