切换React Navigation底部标签页报错不支持访问route对象state属性如何解决
错误触发的核心原因是导航配置写法不规范,或者嵌套导航场景下直接访问了route.state属性,按照以下步骤修改即可:
- 修正底部标签导航器的配置属性名
你当前代码中Tab.Navigator使用的tabOptions属性是错误命名,React Navigation 5.x中底部标签全局配置属性为tabBarOptions,修改对应代码:
<Tab.Navigator tabBarOptions={tabOptions}>
- 修正tabBarIcon的参数接收逻辑
你所有Tab.Screen的tabBarIcon回调没有接收框架传入的参数,直接使用了未定义的color变量,导致框架取值异常。需要修改每个标签的options配置,正确接收参数,示例如下:
<Tab.Screen name="MainHome" component={MainHomeScreen} options={({ route }) => ({ tabBarIcon: ({ color }) => ( <Icon.Home color={color} height={28} width={28} /> ), })} />
其余MainCart、MainProfile标签的配置按照相同逻辑修改即可。
- 规范嵌套导航的路由状态获取逻辑
如果你的业务逻辑中需要获取嵌套栈内当前聚焦的路由名称,禁止直接访问route.state属性,使用官方提供的getFocusedRouteNameFromRoute工具方法:
首先引入工具方法:
import { getFocusedRouteNameFromRoute } from '@react-navigation/native';
使用示例:
options={({ route }) => { // 获取嵌套栈内当前聚焦的路由名 const focusedRouteName = getFocusedRouteNameFromRoute(route); // 示例业务逻辑:进入设置页时隐藏底部标签栏 const tabBarVisible = focusedRouteName !== 'SettingsScreen'; return { tabBarVisible, tabBarIcon: ({ color }) => <Icon.User color={color} height={28} width={28} /> } }}
内容的提问来源于stack exchange,提问作者Ayush Kumar
相关产品推荐
相关产品推荐

