You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

react-navigation/native 6.1.1中React Native Drawer Navigation卡顿求助

Drawer Navigation 开关卡顿排查方案

以下是你的项目依赖:

"dependencies": {
    "@expo-google-fonts/open-sans": "^0.2.2",
    "@expo-google-fonts/poppins": "^0.2.2",
    "@expo-google-fonts/urbanist": "^0.2.2",
    "@hookform/resolvers": "^2.9.10",
    "@ionic-native/splash-screen": "^5.36.0",
    "@react-native-async-storage/async-storage": "~1.17.3",
    "@react-native-community/masked-view": "^0.1.11",
    "@react-navigation/bottom-tabs": "^6.5.2",
    "@react-navigation/drawer": "^6.6.2",
    "@react-navigation/native": "^6.1.1",
    "@react-navigation/native-stack": "^6.9.7",
    "@shopify/flash-list": "1.3.1",
    "axios": "^1.2.2",
    "deprecated-react-native-prop-types": "^4.0.0",
    "expo": "~47.0.8",
    "expo-app-loading": "~2.1.1",
    "expo-font": "~11.0.1",
    "expo-linear-gradient": "~12.0.1",
    "expo-status-bar": "~1.4.2",
    "lottie-react-native": "^5.1.4",
    "module-name": "^0.0.1-security",
    "react": "18.1.0",
    "react-native": "0.70.5",
    "react-native-gesture-handler": "~2.8.0",
    "react-native-reanimated": "~2.12.0",
    "react-native-responsive-fontsize": "^0.5.1",
    "react-native-safe-area-context": "4.4.1",
    "react-native-screens": "~3.18.0",
    "react-native-snap-carousel": "^4.0.0-beta.6",
    "react-native-svg": "13.4.0",
    "react-native-svg-transformer": "^1.0.0",
    "react-native-vector-icons": "^9.2.0",
    "react-native-webview": "11.23.1",
    "react-native-youtube-iframe": "^2.2.2",
    "react-redux": "^8.0.5",
    "redux": "^4.2.0",
    "redux-thunk": "^2.4.2",
    "typescript": "^4.6.3",
    "yup": "^0.32.11"
  }

针对Drawer Navigation开关卡顿的问题,可从以下几个方向排查:

  • Reanimated 插件配置检查
    Drawer的动画依赖react-native-reanimated,确保你的babel.config.js中正确配置了Reanimated插件,且该插件放在所有插件的最后:

    module.exports = function(api) {
      api.cache(true);
      return {
        presets: ['babel-preset-expo'],
        plugins: [
          'react-native-reanimated/plugin',
        ],
      };
    };
    

    配置完成后需重启Metro服务,否则插件不会生效。

  • Drawer内容重渲染优化
    检查Drawer内的组件是否存在不必要的重渲染:

    • 用React.memo包裹无状态组件,减少重复渲染次数
    • 避免在Drawer组件内执行网络请求、大量计算或渲染复杂组件(如大型列表、WebView、Lottie动画),这些操作会占用JS线程资源,拖慢动画帧率
  • Gesture Handler 根容器配置
    确保App入口被GestureHandlerRootView包裹,这是手势处理的必要配置:

    import { GestureHandlerRootView } from 'react-native-gesture-handler';
    
    export default function App() {
      return (
        <GestureHandlerRootView style={{ flex: 1 }}>
          {/* 你的导航容器 */}
        </GestureHandlerRootView>
      );
    }
    
  • 禁用Debug模式测试
    Debug模式下JS线程性能会大幅下降,很多动画卡顿都是Debug模式导致的。摇设备关闭Debug JS Remotely,在正常模式下测试是否仍有卡顿。

  • React Native Screens 启用检查
    @react-navigation/native依赖react-native-screens优化导航性能,确保没有禁用它,可在导航初始化前添加:

    import { enableScreens } from 'react-native-screens';
    enableScreens();
    
  • 冗余依赖清理
    你的依赖中有module-name这个占位符依赖,可直接移除,避免不必要的资源加载。同时确认所有导航相关依赖版本匹配(如@react-navigation/native、@react-navigation/drawer等版本尽量保持兼容)。

  • 动画参数调整
    尝试降低Drawer动画时长,减少动画复杂度:

    <Drawer.Navigator
      drawerAnimationDuration={250}
      sceneContainerStyle={{ backgroundColor: 'transparent' }}
    >
      {/* 你的屏幕配置 */}
    </Drawer.Navigator>
    

内容的提问来源于stack exchange,提问作者Gustavo Giordani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 08:44:56