从 ExNavigation 迁移到 React Navigation

从 ExNavigation 迁移到 React Navigation

原文:https://medium.com/hackernoon/migrate-from-exnavigation-to-react-navigation-1af661ec5082

我用 ExNavigation 已经有一段时间了。这很容易设置,并一直为我工作。如果你在过去的几个月里查阅了自述文件,你可能会注意到它处于维护模式——这意味着它不会被更新(除非必要),因为所有未来的资源都将对导航做出反应。此外,在最近的 React Native 版本中,您可能已经注意到弹出的警告,即navigation experiment已被否决(ExNavigation 是基于它构建的),所以现在是开始迁移的好时机。

那么什么是 React 导航呢?这是一个路由解决方案,它基于从 React Native 的许多其他导航解决方案中获得的知识和经验。我不会在这里详细介绍,但如果你感兴趣,我有一个关于 React 导航的入门指南。

今天,我想带大家了解一下从 ExNavigation 迁移到 React Navigation 的过程。到目前为止,我发现这是一个简单的过程,并且大大简化了我的代码。

完整的源代码可以在 Github 上获得。在自述文件中,我有每个步骤的差异链接。如果你想一步一步地了解如何迁移,请观看视频,否则我将链接到源代码并简要描述我正在做的事情。

警报

虽然this.props.navigator.showLocalAlert的用法可能不经常/不被很多人使用,但它是我经常使用的,并且发现在进行迁移时会很快失效,所以它是我要替换的第一个东西。

为了做到这一点,我使用了react-native-dropdownalert包,然后制作了一个高阶组件,以使下拉方法在我的应用程序中任何需要的地方都可用(原始问题,代码为)。

我不会进入创建特设的细节——如果你想走这条路,可以复制并粘贴到你的应用程序中,只需注意Alert组件,安装hoist-non-react-staticsreact-native-dropdownalert到你的项目中,如果你复制它。

完成后,我用 [AlertProvider](https://github.com/spencercarli/ex-navigation-to-react-navigation/blob/9faf79529c9c36e0dfea976be30241042bf5c5fa/app/index.js#L11)连接我想调用和提醒的任何组件

变化差异

堆栈导航到堆栈导航

在 ExNavigation 中,StackNavigation 组件是大部分应用程序的核心。在 React 导航中,您将为此使用 StackNavigator。

更新非常简单。首先,您需要为您的应用程序创建适当的 StackNavigators,然后在之前使用 StackNavigation 组件的地方使用这些新的 StackNavigators。如果您仅仅停止将 StackNavigation 替换为 StackNavigator,您将会失去 ExNavigation 内置的一些功能,但是如果您一次完成所有操作(我想您会这样做),您将不会有问题。

在您的所有屏幕上,您需要更换

static route = {
  navigationBar: {
    title: '...'
  }
}

随着

static navigationOptions = {
  title: '...'
}

以及您的应用程序需要的任何其他导航选项。您可能想要查看新名称的堆栈导航文档

最后,你会想要用this.props.navigation.navigate('screenName');替换任何一个this.props.navigator.push('screenName');。对我来说,这就像查找和替换一样简单。navigate将默认为推送型动画(在 iOS 上从右到左,在 Android 上从底部渐变)。

如果你想给新屏幕传递道具,语法是this.props.navigation.navigate('screenName', { name: 'Spencer' });

变化差异

选项卡导航到选项卡导航器

我喜欢 TabNavigator 在 React Navigation 中的工作方式——它允许我编写更少的代码,并且更好地匹配应用程序运行的平台。

我所要做的就是创建一个新的 TabNavigator,它的标签与我当前的 TabNavigation 相同,并使用我们之前设置的 StackNavigator 作为屏幕。然后,我用新的 TabNavigator 替换我的应用程序入口点中的Tabs组件,一切就绪。

最后要做的事情是删除你写的所有代码,让 TabNavigation 工作。删除代码同时保持相同的功能是一件非常令人满意的事情。

变化之差

DrawerNavigation 到 DrawerNavigator

用 DrawerNavigator 替换 DrawerNavigation 很像替换选项卡。

我要做的第一件事是创建一个新的 DrawerNavigator。在本例中它的屏幕与我们之前设置的 TabNavigator 相同。

然后,我们可以继续在我们的应用程序入口点导入新的抽屉,一切都应该呈现良好。由于我们不再使用 ex-navigation,您可以去掉 [NavigationProvider](https://github.com/spencercarli/ex-navigation-to-react-navigation/compare/TabNavigation-to-TabNavigator...DrawerNavigation-to-DrawerNavigator#diff-2018087f584c4398b5c3a23fc0e5f9db) 组件和我们拥有的虚拟路由器

你可能已经注意到导航栏中不再有打开抽屉的默认图标(尽管你可以滑动来打开它),所以你会想要添加那个。

最后,您可以删除任何以前的抽屉相关的逻辑:)

变化差异

结论

这不是决定性的,但在转换一些应用程序时,这些是我发现自己在做的事情。将应用从 ExNavigation 转换为 React Navigation 并不复杂,因为 API 非常相似。

对 React Native 的更多提示和技巧感兴趣吗?注册我的电子邮件列表,我会与你分享它们!

黑客中午是黑客如何开始他们的下午。我们是 @AMI 家庭的一员。我们现在接受投稿并乐意讨论广告&赞助机会。

如果你喜欢这个故事,我们推荐你阅读我们的最新科技故事趋势科技故事。直到下一次,不要把世界的现实想当然!


本站为非盈利网站,作品由网友提供上传,如无意中有侵犯您的版权,请联系删除