使用Expo Router的Link组件报错:Cannot read property 'isReady' of undefined
问题分析与解决方案
这个TypeError: Cannot read property 'isReady' of undefined错误,本质是Expo Router的Link组件无法获取到导航上下文(Navigation Context)导致的,通常有以下几个原因和对应解决办法:
Link组件脱离了导航上下文
Expo Router的Link依赖全局的导航上下文来工作,而你自定义的navigationView可能没有嵌套在Expo Router提供的上下文环境中(比如根布局app/_layout.js的导航结构之外)。解决办法:改用
useRouter钩子手动实现跳转,替代Link组件。代码示例:import { useRouter } from 'expo-router'; import { TouchableOpacity, Text } from 'react-native'; const navigationView = () => { const router = useRouter(); return ( <View style={[styles.container, styles.navigationContainer]}> <Text style={styles.paragraph}>I'm in the Drawer!</Text> <Button title="Close drawer" onPress={() => drawer.current.closeDrawer()} /> <TouchableOpacity style={styles.navigationLink} onPress={() => { // 先关闭抽屉再跳转 drawer.current.closeDrawer(); router.push('/screens/HomeScreen'); }} > <Text>Home</Text> </TouchableOpacity> </View> ); };抽屉组件未正确集成到Expo Router导航结构
如果你是手动实现的抽屉(比如用DrawerLayoutAndroid),而非使用Expo Router内置的抽屉导航配置,那么抽屉内容视图不会自动继承导航上下文。解决办法:改用Expo Router官方推荐的抽屉导航配置。在
app/_layout.js中设置抽屉布局:import { Drawer } from 'expo-router/drawer'; export default function RootLayout() { return ( <Drawer> <Drawer.Screen name="screens/HomeScreen" options={{ title: 'Home' }} /> // 其他页面路由 </Drawer> ); }这种方式下,抽屉菜单会自动由Expo Router管理,
Link组件可以正常工作。Expo Router版本兼容性问题
旧版本的expo-router可能存在抽屉环境下Link组件的bug,建议升级到最新稳定版:npx expo install expo-router@latest expo@latest
内容的提问来源于stack exchange,提问作者rdrgtec
相关产品推荐
相关产品推荐

