如何在嵌套 Tab.Navigator 中查找当前 screen/route
How to find current screen/route in nested Tab.Navigator
我有一个用于 Tab.Navigator 的自定义 TabBar,当根据该选项卡的 Stack Navigator 组件中的当前路由选择其中一个选项卡时,它需要执行不同的操作。
如何查看此自定义 TabBar 中当前显示的 Stack.Screen?尝试使用 getRoute 挂钩只会向我显示承载 Tab.Navigator.
的父屏幕
<Tab.Navigator tabBar={(props) => <BottomTabBar {...props} />}>
<Tab.Screen
name="Home"
component={HomeStack}
initialParams={{showSuccess: route.params?.showSuccess}}
/>
<Tab.Screen name="Alternate" component={AlternateScreen} />
</Tab.Navigator>
我无法在使用 tabBarOptions 时传递值,因为我不知道创建标签栏时选择的路由是什么。
我最终在导航器范围之外跟踪当前屏幕,因为内置的 Tab Navigator 没有像我希望的那样在 Stack Navigator 中保留对嵌套屏幕的引用。
只需要确定两个屏幕之间的差异,我的粗略技巧是在上下文挂钩中获取当前屏幕引用,并在安装相关屏幕时在 useEffect 挂钩中更新该值。
无论您的提供者是什么,都有一个像这样的 currentScreen 常量:
const currentScreen = useRef('Closet');
然后,在您的屏幕中,从 useContext 挂钩中的提供程序中解构该值:
const { currentScreen } = useContext(MyContext);
然后,在同一屏幕中更新 useEffect 挂钩中的 currentScreen 值:
useEffect(() => {
currentScreen.current = 'NewScreen';
}, []);
我有一个用于 Tab.Navigator 的自定义 TabBar,当根据该选项卡的 Stack Navigator 组件中的当前路由选择其中一个选项卡时,它需要执行不同的操作。
如何查看此自定义 TabBar 中当前显示的 Stack.Screen?尝试使用 getRoute 挂钩只会向我显示承载 Tab.Navigator.
的父屏幕<Tab.Navigator tabBar={(props) => <BottomTabBar {...props} />}>
<Tab.Screen
name="Home"
component={HomeStack}
initialParams={{showSuccess: route.params?.showSuccess}}
/>
<Tab.Screen name="Alternate" component={AlternateScreen} />
</Tab.Navigator>
我无法在使用 tabBarOptions 时传递值,因为我不知道创建标签栏时选择的路由是什么。
我最终在导航器范围之外跟踪当前屏幕,因为内置的 Tab Navigator 没有像我希望的那样在 Stack Navigator 中保留对嵌套屏幕的引用。
只需要确定两个屏幕之间的差异,我的粗略技巧是在上下文挂钩中获取当前屏幕引用,并在安装相关屏幕时在 useEffect 挂钩中更新该值。
无论您的提供者是什么,都有一个像这样的 currentScreen 常量:
const currentScreen = useRef('Closet');
然后,在您的屏幕中,从 useContext 挂钩中的提供程序中解构该值:
const { currentScreen } = useContext(MyContext);
然后,在同一屏幕中更新 useEffect 挂钩中的 currentScreen 值:
useEffect(() => {
currentScreen.current = 'NewScreen';
}, []);