Как мне обработать backAndroidHandler в каждой сцене с помощью response-native-router-flux - PullRequest
1 голос
/ 08 мая 2020

В качестве описания заголовка я использую react-native-router-flux.

И есть вопрос, раньше я использовал backAndroidHandler={true} в <Router/> нормально работать.

Но теперь, потому что по какой-то причине мне нужно установить backAndroidHandler для управления включением физической кнопки возврата в другой сцене.

Итак, я не могу просто вставить его в маршрутизатор что-то вроде этого раньше:

Пример:

<Router
    backAndroidHandler={true}>
    <Scene key="a" />
    <Scene key="b" />
    <Scene key="c" />
</Router>

Как я могу установить backAndroidHandler в другой сцене или в теге, чтобы добиться этого без setState (потому что он будет повторно отображаться на странице маршрута)?

Я пробовал, чтобы кто-то сказал в другом вопросе, используя вроде <Scene key="c" type={ActionConst.RESET}/>, не сработало.

Любая помощь или рекомендация будут признательны. Спасибо.

1 Ответ

1 голос
/ 22 мая 2020

После нескольких исследований я нашел другой способ достижения этого эффекта.

Используйте BackHandler из react-native, чтобы добавить слушателя для прослушивания физического триггера кнопки возврата, а затем сравните с react-native-router-flux Actions.currentScene, чтобы определить, что они должны делать на разных страницах, например:

import { Text, StyleSheet, Image, View, BackHandler, TouchableOpacity } from "react-native";
...

class ResultsView extends Component {
  componentDidMount() {
    BackHandler.addEventListener('hardwareBackPress', this.handleBackButtonClick); //here
  }
  componentWillUnmount() {
    BackHandler.removeEventListener('hardwareBackPress', this.handleBackButtonClick);
  }
  handleBackButtonClick() {
    let cs = Actions.currentScene;
    if (cs === "APage" || cs === "BPage" || cs === "CPage" || cs === "DPage") {
      console.log("nono square don't pop!")
    } else {
      Actions.pop()
      console.log("touch to pop here")
    }
  }
...

А затем установите для backAndroidHandler в маршрутизаторе значение true:

<CustomRouter backAndroidHandler={true}>
...

И все работает нормально.

...