我将 ex-navigation 与 Exponent 和 React Native 一起使用。我有一个多选项卡 TabNavigation,其中每个选项卡都有自己的 StackNavigation 元素。当用户更改 TabNavigation 中的选项卡时,我想重置前一个选项卡的堆栈。
我已经可以使用popToTop重置 StackNavigation 元素,但我的问题是确定用户何时更改选项卡。是否有可以订阅的已发出的选项卡更改事件或路由更改事件?
我将 ex-navigation 与 Exponent 和 React Native 一起使用。我有一个多选项卡 TabNavigation,其中每个选项卡都有自己的 StackNavigation 元素。当用户更改 TabNavigation 中的选项卡时,我想重置前一个选项卡的堆栈。
我已经可以使用popToTop重置 StackNavigation 元素,但我的问题是确定用户何时更改选项卡。是否有可以订阅的已发出的选项卡更改事件或路由更改事件?
在ex-navigation
开发人员的帮助下,我找到了一种在导航离开时清除选项卡堆栈的方法。我们可以为组件附加一个onPress
处理程序TabNavigation
,它将被传递给默认的事件处理程序。在调用默认处理程序以更改选项卡后,我们可以执行任何其他所需的操作。这是 TabNavigation 的一个版本,当用户单击任何选项卡时,它会清除第一个选项卡的堆栈:
export default class RootNavigation extends React.Component {
constructor(props) {
super(props);
this.onPress = this.onPress.bind(this);
}
onPress(switchTab) {
switchTab();
requestIdleCallback(() => {
this.props.navigation.performAction(({stacks}) => {
stacks("first").popToTop();
});
});
}
render() {
return (
<View>
<TabNavigation initialTab="first">
<TabNavigationItem id="first-tab" onPress={this.onPress}>
<StackNavigation id="first" navigatorUID="first" initialRoute="first-route" />
</TabNavigationItem>
<TabNavigationItem id="second-tab" onPress={this.onPress}>
<StackNavigation id="second" navigatorUID="second" initialRoute="second-route" />
</TabNavigationItem>
<TabNavigationItem id="third-tab" onPress={this.onPress}>
<StackNavigation id="third" navigatorUID="third" initialRoute="third-route" />
</TabNavigationItem>
</TabNavigation>
</View>
);
}
};
请注意,我们操作的堆栈stacks("first")
必须同时具有 anid
和navigatorUID
设置为"first"
。