提问人:Marko Petrovic 提问时间:11/15/2023 更新时间:11/16/2023 访问量:38
React Native 使用硬件后退按钮导航到不同的选项卡
React Native navigate to different tab with hardware back button
问:
我正在尝试使用 react 导航更改默认的 android 硬件后退按钮行为。我有带有 6 个选项卡的底部选项卡导航器。例如 Tab1 到 Tab6 。当我从通知中打开应用程序时(取决于某些条件),初始选项卡是 Tab5 或 Tab6,但是当我按下 android 硬件后退按钮时,我切换到了 Tab1(这是我的主页选项卡),但我想切换到 Tab4。
我设法更改了后退按钮行为以打开一些模式,并打开了按钮以导航到选项卡 4。我的问题是,可以在没有一些警报或模态的情况下完成吗?
根据文档,我将事件侦听器包装在 useFocusEffect 和 UseCallback 中
const jumpToMessage = TabActions.jumpTo('Message');
useFocusEffect(
useCallback(() => {
const backAction = () => {
navigation.dispatch(jumpToMessage);
};
const subscription = BackHandler.addEventListener(
'hardwareBackPress',
backAction
);
return subscription.remove();
}, [])
);
答:
0赞
user18309290
11/16/2023
#1
在 Navigator 中用于 backBehavior 以删除默认处理,然后用于自定义行为。下面是导航到上一个选项卡的简单示例。none
BackHandler
const tabs = ['Tab 1', 'Tab 2', 'Tab 3', 'Tab 4', 'Tab 5'];
function Tabs() {
const navigation = useNavigation();
const state = useNavigationState((state) => state);
useEffect(() => {
const backAction = () => {
if (state != undefined) {
navigation.navigate(tabs[state.index > 0 ? state.index - 1 : 0]);
}
return true;
};
const backHandler = BackHandler.addEventListener(
'hardwareBackPress',
backAction
);
return () => backHandler.remove();
}, [navigation, state]);
return (
<Tab.Navigator backBehavior="none">
{tabs.map((tab) => (
<Tab.Screen name={tab} component={Screen} />
))}
</Tab.Navigator>
);
}
评论
0赞
Marko Petrovic
11/16/2023
是的,它现在可以工作了。多谢。我只是想不通。再一次,非常感谢......你拯救了我的一天:)
评论