ReactNative 快速开始
学习使用 ReactNative 最令人头疼的就是环境问题,因为大多数 Web 开发者,并不熟悉 Android 与 IOS 的开发环境,配置起来比较繁琐。当然 Android 程序员也不熟悉 IOS 环境,反之亦然,这导致很多人因为繁杂的开发环境而放弃学习或者暂时搁浅。
为了改善这个问题,一个快速的开发环境解决方案应运而生。这个方案需要两个工具:1. create-react-native-app 2. Expo。
create-react-native-app
这是一款用来创建 ReactNative 项目的脚手架工具。特点是无需配置繁杂的 Android 或 IOS 开发环境,便可进行原生应用的开发,极大简化了环境搭建与配置的过程,很适合学习使用。
- [参考文档] https://reactnative.cn/docs/getting-started.html
- [替代方案] https://facebook.github.io/react-native/docs/getting-started.html
安装
1 | 安装 |
使用
1 | 创建项目 |
Expo
这是一款安装在手机上的应用,专门负责运行上述方式构建的 App,这有点像是微信里面运行的小程序。IOS 可以到 AppStore 里面搜索下载,Android 可以到 GooglePlay 里面搜索下载,也可以到 Github 里下载。
- [Github] https://github.com/expo/expo
真机运行
准备工作:使用create-react-native-app创建一个项目,然后手机安装Expo应用,并确保手机与开发机处于同一局域网下。
项目运行:npm start启动项目,打开Expo应用,使用里面的扫一扫功能,扫描项目启动后生成的巨大二维码,等待JS打包传输完毕,就会在手机上运行。
IP错误问题
因为开发机可能会有多个ip地址,比如以太网IP、虚拟IP、无线局域网IP等等。当项目启动时通常会无脑的选择IP列表中的第一个,假如是以太网IP,那么就与手机所处的无线局域网不同,造成网络连接失败。
下面是这种情况的图例,项目启动时使用的是IP列表中的第一个94 IP,并没有使用无线局域网IP。


如果发生这种情况,先Ctrl+C停掉项目,设置一个环境变量,然后再重启项目即可。
- [参考解决方案] https://github.com/react-community/create-react-native-app/blob/d01ddabb634532200629c6d17f920eb856fa6416/react-native-scripts/template/README.md#environment-variables
- [参考解决方案] https://github.com/react-community/create-react-native-app/issues/270
1 | 设置环境变量 |
开发初体验
- 在项目根目录下有个
App.js, 是应用的根组件, 我们手机上看到的内容就是这个组件实现的 - 尝试修改
App.js中的文本内容, 然后手机摇一摇, 点击Reload选项即可更新修改内容 - 也可尝试给文本添加新的样式
1 | import React from 'react'; |
错误提示 - 红屏和黄屏
RN代码运行时会把错误分为红屏和黄屏两种,红屏会以全屏红色显示在应用中,导致程序无法正常运行,红屏通常是编码错误导致的,必须修复。
黄屏代表警告,会显示在应用下方,不影响程序运行,不修复也可以,警告可以通过代码禁止。
红屏和黄屏只在debug版本中才会显示,在rellease版本中不会。一般情况下,通过RN红屏中的错误提示信息,就可以定位问题,如果是语法等常见运行错误,RN也会给出错误代码所在位置与行数,所以出现红屏一定要阅读描述信息。
1 | // 频闭黄色警告,参数为一个数组:数组中的字符串就是要屏蔽的警告的开头的内容。 |
调试菜单
React-Native开发调试没有本地代码方便,但也是可以调的,在调试菜单中可以进行开发调试相关的配置。调试菜单只在debug版本中可以被调出,如果是模拟器环境,Windows平台按window+m可调出,也可能是F1或F2,Mac平台按commond+m可调出,或者发送adb shell input keyevent 82指令。如果是真机,摇一摇就可以调出调试菜单。
调试菜单说明
- Reload: 重新加载整个页面
- Debug JS Remotely: 启动远程调试, 会自动打开chrome浏览器, 然后可在开发者工具中调试js
- Enable Live Reload: 开启自动加载, 代码变动会自动更新整个页面
- Enable Hot Reloading: 热更新, 代码变动自动的进行局部更新
- Dev Sttings: 开发调试配置