如何使用react-native-router-flux在每个场景中处理backAndroidHandler

问题描述 投票:0回答:1

作为标题说明,我正在使用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}/>之类的方法在其他问题中说过某人不起作用。

任何帮助或建议,将不胜感激。谢谢。

javascript android react-native react-native-router-flux
1个回答
0
投票

经过一段时间的研究,我找到了另一种方法来达到这种效果。

使用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}>
...

而且效果很好。

© www.soinside.com 2019 - 2024. All rights reserved.