前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >React Navigation 5.x迁移指南

React Navigation 5.x迁移指南

原创
作者头像
xiangzhihong
修改2020-12-22 10:16:51
1.9K0
修改2020-12-22 10:16:51
举报
文章被收录于专栏:向治洪向治洪

React Navigation是RN开发中一个比较常见的导航器,主要提供三种基本的导航样式。

  • StackNavigator:类似于普通的Navigator,屏幕上方导航栏;
  • TabNavigator:类似于iOS里面的TabBarController,屏幕下方的标签栏;
  • DrawerNavigator:抽屉样式,侧边滑出;

本文不具体介绍React Navigation 5.x的基本使用,本文主要讲如何将4.x迁移到5.x。

对比4.x,大部分API和4x都是一致的,当然5.x的变化还是蛮大的,并且语法也发送了一些变化,不过迁移的总体成本并是很大。首先,在5.x中对应的包名发生了变化,要完成4.x到5.x的迁移就需要将下面的包迁移到5x中去。

在这里插入图片描述
在这里插入图片描述

因此,将4.x迁移到5.x只需要对照上表,在package.json中依赖的4.x的包删除,然后重新安装对应右侧5.x的包即可。

Navigation 组件

在React Navigation 5.x 创建导航器的方式发生了变化,React Navigation 5.x 使用<NavigationContainer>代替4.x的<createAppContainer>,如下所示。

代码语言:txt
复制
import { NavigationContainer } from '@react-navigation/native';

export default function App() {
  return <NavigationContainer>
     {/*...*/}
  </NavigationContainer>;
}

另外,5.x中<NavigationContainer>的onStateChangeAPI用来代替<createAppContainer>的onNavigationStateChange。同时,如果你的项目中需要用到多个NavigationContainer嵌套的情况,那么需要在被嵌套的<NavigationContainer>中设置independent={true},如下所示。

代码语言:txt
复制
<NavigationContainer
    independent={true}>

路由配置迁移

在React Navigation 4.x版本小红,我们通常使用createXNavigator() 函数来创建对已的导航器配置,而在5.x中则需要通过XX.Navigator + XX.Screen 以组件的方式进行配置的。例如,React Navigation 4.x版本创建导航的代码如下。

代码语言:txt
复制
const RootStack = createStackNavigator(
  {
    Home: {
      screen: HomeScreen,
      navigationOptions: { title: 'My app' },},
    Profile: {
      screen: ProfileScreen,
      params: { user: 'me' },},
  },
  {
    initialRouteName: 'Home',
    defaultNavigationOptions: {
      gestureEnabled: false,
    },
  }
);

不过,5.x版本Navigation的配置修改了写法,如下所示。

代码语言:txt
复制
const Stack = createStackNavigator();

function RootStack() {
  return (
    <Stack.Navigator
      initialRouteName="Home"
      screenOptions={{ gestureEnabled: false }} >
      <Stack.Screen
        name="Home"
        component={HomeScreen}
        options={{ title: 'My app' }}/>
      <Stack.Screen
        name="Profile"
        component={ProfileScreen}
        initialParams={{ user: 'me' }}/>
    </Stack.Navigator>
  );
}

可以发现,5.x中所有的配置是通过props的方式传递个navigator的。同时,5.x使用<Screen>组件元素来表示一个页面,参数变化如下:

  • params 变成了initialParams;
  • navigationOptions 变成了options;
  • defaultNavigationOptions变成了screenOptions

navigation prop

相比navigation prop的4.x版本,navigation prop 5.x版本也发生了改变,例如,之前我们使用this.props.navigation.state.params来获取数据,现在要改成this.props.route.params方式来获取数据。

我将在下一篇文章介绍React Navigation 5.x的基本使用。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Navigation 组件
  • 路由配置迁移
  • navigation prop
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档