2021年如何构建React Native应用📱(第一部分)
介绍
概括
介绍
React Native 是一个非常流行的原生移动应用开发框架。与React一样,React Native也缺乏明确的规范,因此你需要做出很多实现方面的决策。本文将探讨如何根据你的需求,找到构建应用的最佳方法。
1. Bootstrap
在 React Native 中,有几种方法可以启动一个新项目:
React Native CLI
这是创建 React Native 应用的标准工具。✅
优点:
- 高度可定制。它会创建两个独立的应用程序,一个用于 iOS,一个用于 Android。这些都是原生应用程序,因此您可以根据需要修改原生代码。
- 您可以随时升级到最新的 React Native 版本。
- 没有任何限制,您可以选择最适合自己的方式。
❌缺点:
- 初始设置有点复杂。您需要配置 Xcode 和 Android Studio。
- 由于需要修改原生代码,因此很难将 React Native 更新到新版本。
- 你从盒子里拿不到什么好东西。
Expo CLI
Expo 是一套围绕 React Native 构建的工具集。它类似于 create-react-app,并且拥有许多功能。
✅ 优点:
- 最简单的入门方式。无需编写本地代码。
- 开箱即用,功能丰富(相机、OTA 更新、推送通知等等)。
- 易于在真机上进行测试。
❌缺点:
- 存在一些局限性。
- 除非执行 eject 操作,否则无法更改本地代码。
- 当 React Native 发布新版本时,您需要等到 Expo 发布兼容版本。
结论:在很多情况下,使用 Expo 都很有意义,尤其是在 React Native 新手入门时。我个人认为它是一个很棒的工具,但它也增加了一层复杂性。值得注意的是,您可以随时从 Expo 中退出,并完全访问底层原生项目。
2. JavaScript 或 TypeScript
TypeScript 是一种扩展自 JavaScript 的语言,它添加了类型定义。React
Native CLI 和 Expo CLI 都支持 TypeScript 模板。
# React Native CLI
npx react-native init MyApp --template react-native-template-typescript
# Expo. Select TypeScript template.
expo init MyTSProject
有时你会觉得 TypeScript 会拖慢你的速度。这主要是因为很多包没有类型定义。但 TypeScript 越来越流行,将来这不会再是个问题。使用 TypeScript 的优势在于,它能在编译时捕获更多错误,并且还能提供更好的代码补全功能。
结论:如果你要开发一个小型应用,使用 TypeScript 可能意义不大。但对于中型和大型应用,我强烈建议从一开始就使用 TypeScript。
3. 类组件与函数式组件
我看到很多人在 Stack Overflow 上问,他们应该使用基于类的组件还是函数式组件和 Hooks。这里我就不详细赘述了,因为这是一个比较复杂的话题,不过 Dan Abramov 在这个视频里解释了使用 Hooks 的好处。
结论:我喜欢用函数式组件和 Hooks 来构建我的所有项目。我在许多新的代码库和教程中都看到了这种趋势。如果你仍然想使用类,不用担心, React 目前没有计划移除类。
4. 状态管理
这非常重要,会对开发产生重大影响。状态管理指的是在应用程序中共享数据的方式。在 React 中,每个组件都可以拥有自己的状态,数据可以通过 props 从父组件传递到子组件。但是,对于非父子关系的两个组件,传递数据却并非易事。许多库都在尝试解决这个问题,其中最流行的是 Redux。
React 16.3 引入了Context,当它与 hooks 结合使用时,可以形成一种强大的状态管理模式。
务必查看React State Museum。在这里,您可以找到使用不同状态管理库实现的打包清单应用程序。
结论:如果你正在构建一个简单的应用程序,可能不需要像 Redux 或 MobX 这样的库。它们需要编写大量的样板代码,并且会增加应用程序的复杂性。但是,如果你要构建一个大型应用程序,其中包含大量的数据获取、操作和异步操作,那么务必选择合适的工具。Redux 仍然非常流行,但你绝对应该了解一下 MobX(尤其是MobX State Tree)。
5. UI 工具包
UI工具包提供了一系列样式化的UI组件,可以帮助您更快地构建应用程序。市面上有一些流行的工具包:
结论:使用 UI 工具包确实很方便,可以立即获得诸如页脚、页眉或菜单之类的组件。但我必须强调,选择一个积极维护的库至关重要。
6. 造型
使用 React Native,你可以用 JavaScript 来设置应用程序的样式。每个核心组件都接受一个 style 属性。但是,不建议使用内联样式,因为它们会降低代码的可读性。Stylesheet
是一个 CSS 样式表抽象层,它允许你将样式从渲染函数中分离出来。styled -components和emotion
是两个强大的库。它们功能类似,并且都与 React Native 兼容。
结论:与 Web 开发不同,React Native 应用的样式设置选项非常有限。使用内联样式是一种糟糕的做法,因此我强烈建议在样式表和样式组件之间做出选择。
7. 身份验证
大多数现代应用程序都使用某种形式的身份验证。许多应用程序都实现了社交登录(例如使用 Google、Facebook、Apple 或类似帐户登录),因为这是一种快速安全的身份验证方式。Expo可用于登录多个身份验证提供商。其他流行的解决方案包括Firebase Authentication和AWS Amplify Authentication。
如果您打算对自己的后端进行身份验证,则可能需要持久化 JWT 或类似的令牌。请注意,异步存储并不安全,更好的选择是使用React Native Keychain。
结论:如果社交登录符合您的需求,我强烈推荐,因为它能让您的工作更轻松。我个人觉得 Firebase 非常易用。此外,还有一个软件包可以将 Firebase 支持引入 React Native。
概括
今天就先讲到这里。
在本文的第二部分,我们将讨论推送通知、OTA 更新、分析以及其他许多您应该添加到应用中的重要功能。