美文网首页react-native
导航@react-navigation 版本5.x

导航@react-navigation 版本5.x

作者: _若无 | 来源:发表于2020-12-08 13:16 被阅读0次
    初始化安装:
    yarn add react-native-reanimated react-native-gesture-handler react-native-screens react-native-safe-area-context @react-native-community/masked-view
    yarn add @react-navigation/native @react-navigation/stack
    
    配置
    • 将下面内容添加到index.js 或者 App.js 开头,如果不添加在\color{red}{开发环境没问题,生产环境会闪退}
    import 'react-native-gesture-handler';
    
    • Android 配置
      更新MainActivity.java文件 添加下面代码
    package com.swmansion.gesturehandler.react.example;
    import com.facebook.react.ReactActivity;
    + import com.facebook.react.ReactActivityDelegate;
    + import com.facebook.react.ReactRootView;
    + import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView;
    public class MainActivity extends ReactActivity {
    
      @Override
      protected String getMainComponentName() {
        return "Example";
      }
    +  @Override
    +  protected ReactActivityDelegate createReactActivityDelegate() {
    +    return new ReactActivityDelegate(this, getMainComponentName()) {
    +      @Override
    +      protected ReactRootView createRootView() {
    +       return new RNGestureHandlerEnabledRootView(MainActivity.this);
    +      }
    +    };
    +  }
    }
    
    • 使用
      避免每个组件都传navigation ={this.props.navigation}的繁琐,如下方法可以避免繁琐
      获取navigation方法
      1.利用hooks方法,在任何组件中不依赖任何组件
    const navigation = useNavigation();
    
    1. 在根容器中添加一个ref
    • 根容器
    import { navigate, navRef } from '../utils/navService';
    
    <NavigationContainer ref={navRef}>
        <Stack.Navigator>
          <Stack.Screen name="Home" component={HomeScreen} />
          <Stack.Screen name="Detail" component={DetailScreen} />
        </Stack.Navigator>
    </NavigationContainer>
    
    • 创建一个ref
      utils/navService.js
    /**
     * created by yue on 2020.12.08
     * 封装导航
     * 
     * 类型检查
     *  ? 表示可选
     */
    import * as React from 'react';
    
    export const navRef = React.createRef();
    
    // 需要跳转的地方引入该FN即可
    export function navigate(routeName, params) {
      return navRef.current?.navigate(routeName, params);
    }
    
    export function goBack() {
      return navRef.current?.goBack();
    }
    
    // todos 添加并导出更多想要的Nav操作 
    

    相关文章

      网友评论

        本文标题:导航@react-navigation 版本5.x

        本文链接:https://www.haomeiwen.com/subject/rrbfgktx.html