美文网首页React-Native程序员
React-Native之react-navigation

React-Native之react-navigation

作者: 武昌鱼艾特222 | 来源:发表于2018-04-24 13:18 被阅读33次

    先写下react-navigation的StackNavigator、TabNavigator的使用方法,用到其他的再持续更新。

    StackNavigator

    /**
     * @routeConfigMap是一个NavigationRouteConfigMap类型的必填参数
     * @stackConfig是一个StackNavigatorConfig类型的必填参数
     */
    StackNavigator(routeConfigMap,stackConfig?);
    
    • StackNavigator的NavigationRouteConfigMap
    NavigationRouteConfigMap有两种选择
    { "自定义路由名称" : NavigationComponent }
    或
    {
        "自定义路由名称": {
            screen: NavigationComponent; //或者:getScreen: () => NavigationComponent
            path?:string; //深度链接的路径
            navigationOptions?: {
                header?: (React.ReactElement<any> | ((headerProps: HeaderProps) => React.ReactElement<any>)) | null; //自定义header;如果想隐藏顶部导航条只要将这个属性设置为null
                headerTransparent?: boolean; //标题是否透明
                headerTitle?: string | React.ReactElement<any>; //设置导航栏标题,设置后不会改变tab的名称。
                headerTitleStyle?: StyleProp<TextStyle>; //设置导航条文字样式
                headerTintColor?: string; //设置导航栏文字颜色
                headerLeft?: React.ReactElement<any>; //设置导航条左侧
                headerBackTitle?: string | null; //设置跳转页面左侧返回箭头后面的文字,默认是上一个页面的标题。可以自定义,也可以设置为null
                headerTruncatedBackTitle?: string; //设置当上个页面标题不符合返回箭头后的文字时,默认改成"返回"。(上个页面的标题过长,导致显示不下,所以改成了短一些的。)
                headerBackTitleStyle?: StyleProp<TextStyle>; //设置导航条返回文字样式
                headerPressColorAndroid?: string; //安卓独有的设置颜色纹理,需要安卓版本大于5.0
                headerRight?: React.ReactElement<any>; //设置导航条右侧
                headerStyle?: StyleProp<ViewStyle>; //设置导航条的样式
                headerBackground?: React.ReactNode | React.ReactType; 
                gesturesEnabled?: boolean; //是否支持滑动返回手势,iOS默认支持,安卓默认关闭
                gestureResponseDistance?: { vertical?: number;  horizontal?: number } //对象覆盖触摸从屏幕边缘开始的距离,以识别手势
            }
        }
    }
    
    • StackNavigator的StackNavigatorConfig
    {
        mode?: 'card' | 'modal'; //页面切换时的动画,card:使用iOS和安卓默认的风格。modal:iOS独有的使屏幕从底部画出。类似iOS的present效果
        headerMode?: 'float' | 'screen' | 'none'; //边缘滑动返回上级页面时动画效果。float:iOS默认的效果,可以看到一个明显的过渡动画。screen:滑动过程中,整个页面都会返回。none:没有动画
        cardStyle?: StyleProp<ViewStyle>; //自定义设置跳转效果
        transitionConfig?: (
          transitionProps: NavigationTransitionProps,
          prevTransitionProps: NavigationTransitionProps,
          isModal: boolean,
        ) => TransitionConfig; //自定义设置滑动返回的配置。具体参数可参看源码
        onTransitionStart?: () => void; //当转换动画即将开始时被调用
        onTransitionEnd?: () => void; //当转换动画完成将被调用
        headerTransitionPreset?: 'fade-in-place' | 'uikit';
        initialRouteName?: string; //设置默认的页面组件,必须是上面已注册的页面组件
        initialRouteParams?: NavigationParams; //初始路由的参数
        paths?: NavigationPathsConfig; //深度链接的路径,适用于第三方应用打开APP
        navigationOptions?: NavigationScreenConfig<NavigationStackScreenOptions>;//和NavigationRouteConfigMap里的navigationOptions一样
        containerOptions?: any; //不知道什么用处,猜测应该是配置StackNavigator一些选项
    }
    

    TabNavigator

    /**
     * @routeConfigMap是一个NavigationRouteConfigMap类型的必填参数
     * @drawConfig是一个TabNavigatorConfig类型的必填参数
     */
    TabNavigator(routeConfigMap,drawConfig?);
    
    • TabNavigator的NavigationRouteConfigMap
    TabNavigator的NavigationRouteConfigMap和StackNavigator的StackNavigatorConfig的数据类型相似,只是navigationOptions不同;
    { "自定义路由名称" : NavigationComponent }
    或
    {
        "自定义路由名称": {
            screen: NavigationComponent; //或者:getScreen: () => NavigationComponent
            path?:string; //深度链接的路径
            navigationOptions?: {
                title?: string; //标题,会同时设置导航条和标签栏的title
                tabBarIcon?:React.ReactElement<any> | ((options: { tintColor: (string | null), focused: boolean }) => (React.ReactElement<any> | null)); //设置标签栏的图标
                tabBarLabel?:string | React.ReactElement<any> | ((options: { tintColor: (string | null), focused: boolean }) => (React.ReactElement<any> | string | null)); //设置标签栏的title
                tabBarVisible?: boolean; //是否隐藏标签栏。默认不隐藏(true)
                tabBarTestIDProps?: { testID?: string, accessibilityLabel?: string}; //tabBarTestIDProps
                tabBarOnPress?: (options: {scene: TabScene,jumpToIndex: (index: number) => void}) => void; //设置tabBar的点击事件
            }
        }
    }
    
    • TabNavigator的TabNavigatorConfig
    {
        lazy?: boolean; //是否懒加载tab,默认false
        removeClippedSubviews?: boolean; //当此属性为true时,屏幕之外的子视图(子视图的overflow样式需要设为hidden)会被移除。这个可以提升大列表的滚动性能。
        initialLayout?: { height: number; width: number }; //初始化布局
        initialRouteName?: string; //设置默认的页面组件
        paths?: NavigationPathsConfig; //深度链接的路径,适用于第三方应用打开APP
        navigationOptions?: NavigationScreenConfig<NavigationTabScreenOptions>; ////和TabNavigator的NavigationRouteConfigMap里的navigationOptions一样
        order?: string[]; // 将它们作为真正的路由名称,而不是“string”
        backBehavior?: 'none' | 'initialRoute'; // 点击返回按钮是否导致路由器切换到初始选项卡;默认是 `initialRoute`
        tabBarComponent?: TabBarTop: React.ComponentType<TabBarTopProps> | TabBarBottom: React.ComponentType<TabBarBottomProps>;
        tabBarPosition?: 'top' | 'bottom'; //设置tabbar的位置,iOS默认在底部,安卓默认在顶部
        tabBarOptions?: {
          activeTintColor?: string; //选中状态下label的颜色
          allowFontScaling?: boolean; //是否允许字体按比例缩放
          activeBackgroundColor?: string; //选中状态下tab背景的颜色
          inactiveTintColor?: string; //未选中状态下label的颜色
          inactiveBackgroundColor?: string; //未选中状态下tab背景的颜色
          showLabel?: boolean; //是否显示label,默认true
          style?: StyleProp<ViewStyle>; //tabbar的样式
          labelStyle?: StyleProp<TextStyle>; //label的样式
          iconStyle?: StyleProp<ViewStyle>; //icon的样式
          // Top
          showIcon?: boolean; //是否显示图标,默认false
          upperCaseLabel?: boolean; //是否label大写,默认为true
          pressColor?: string; //material涟漪效果的颜色
          pressOpacity?: number; //按压标签的透明度变化
          scrollEnabled?: boolean; //是否启用可滚动选项卡
          tabStyle?: StyleProp<ViewStyle>; //tab的样式
          indicatorStyle?: StyleProp<ViewStyle>; //标签指示器的样式对象,可以将height或opacity设置为0隐藏indicator
        };
        swipeEnabled?: boolean; //是否允许在标签之间进行滑动
        animationEnabled?: boolean; //是否在更改标签时显示动画
    }
    

    相关文章

      网友评论

        本文标题:React-Native之react-navigation

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