如何让Expo Router在Expo Go安卓端快速刷新后保留当前路由
解决Expo Router自动刷新后跳回首页的问题
试试下面几种配置方式,能让安卓Expo Go自动刷新后保留当前开发的路由:
调整Metro配置
在项目根目录的metro.config.js(没有的话直接新建)里添加以下配置,确保Metro能正确识别所有源码扩展名,同时开启Babel配置查找:const { getDefaultConfig } = require('expo/metro-config'); const config = getDefaultConfig(__dirname); config.resolver.sourceExts.push('cjs'); config.resolver.enableBabelRCLookup = true; module.exports = config;持久化路由状态
在app/_layout.js(或_layout.tsx)里,通过本地存储保存当前路由,刷新后自动恢复:import { useRouter, useSegments } from 'expo-router'; import AsyncStorage from '@react-native-async-storage/async-storage'; import { useEffect } from 'react'; export default function RootLayout() { const router = useRouter(); const segments = useSegments(); // 每次路由变化时保存到本地 useEffect(() => { AsyncStorage.setItem('lastRoute', JSON.stringify(segments)); }, [segments]); // 应用加载时恢复之前的路由 useEffect(() => { const restoreRoute = async () => { const lastRoute = await AsyncStorage.getItem('lastRoute'); if (lastRoute) { const parsedRoute = JSON.parse(lastRoute); // 避免重复跳首页 if (parsedRoute.join('/') !== '') { router.replace(parsedRoute); } } }; restoreRoute(); }, []); // 这里放你原本的布局组件,比如<Stack />或者<Tabs /> }临时禁用快速刷新(调试用)
如果上面的方法都没效果,可以临时关掉快速刷新,在app.json里添加配置:{ "expo": { "packagerOpts": { "nonPersistent": true } } }注意:这个方法会让刷新速度变慢,只适合临时调试用。
内容的提问来源于stack exchange,提问作者Vitor Figueredo Marques
相关产品推荐
相关产品推荐

