React Native 调试最佳实践

洛竹
• 阅读 1670

本文翻译自 How To Debug React Native Apps Like A Pro? (Tools And Best Practices)

本文首发于 洛竹的官方网站

人非圣贤孰能无过。

这句话还(更确切地说:尤其是...)适用于软件开发者。

这就是为什么在每一个开发者的职业生涯中最重要的是知道如何处理这些失误。作为一个 React Native 开发者,我经常想要写出没有 BUG 的代码,但是当出现问题时,我需要确保我能够追踪并解决问题。

React Native 调试最佳实践

在这篇文章中,我想讨论一些日常用于移动应用程序开发的工具和技术。我希望你可以发现一些对你的项目有帮助的东西。

静态检测,类型检查和格式化

静态检测

Linting 是执行程序的过程,用于分析潜在的语法程序错误。JavaScript 中最著名的 Linting 插件有:

  • ESLint - JavaScript 类型检查和格式化工具
  • Google's Closure Compiler – 一个 JavaScript 优化器,可以更快速,更简洁地重写代码并检查本机 JavaScript 函数的使用。
  • JSLint – JavaScript 语法检查器和验证器

现在 ESLint 处于一统江湖的地位,也是 TypeScript 官方的 Linting 插件。

类型检查

我使用 TypeScript(TS)或者 Flow 来做 类型检查。两者最主要的区别是前者是编程语言,而 Flow 是类型检查器。在我看来,TS 是更优的选择,因为大量类似于自动导入、自我证明和使用下一代 JavaScript 的能力。

原文中说 TS 是编程语言,我不完全赞同。毕竟官方的定位也只是 JavaScript 的超集。

格式化代码

程序员大部分时间都在阅读代码,因此重点不是更快地阅读代码,而是快速理解代码。

为了做到快读理解代码,我们需要最有效的视觉表示。这就是为什么我们需要很好地格式化代码。

比较一下下面的代码片段:

React Native 调试最佳实践

React Native 调试最佳实践

我建议大家使用 Prettier 格式化代码 - 它很容易集成和配置。你也可以通过 eslint-config-prettiereslint-plugin-prettier 这两个插件和 ESLint 配合使用。

如何调试 React Native 应用

React Native 具有开发人员友好的环境,会告诉我们我们在警告或错误方面做错了什么:

React Native 调试最佳实践

内置调试模式

首先,您可以使用浏览器的内置调试模式(例如 Chrome 或 Safari)调试应用程序。

在 Chrome 中使用,你需要安装 react-devtools

npm install -g react-devtools

在开发模式下,您可以打开开发人员菜单并从那里开始调试您的应用程序。只需激活 debug 选项:

React Native 调试最佳实践

它将打开带有 http://localhost8081/debugger-ui 路径的 Chrome 浏览器标签。

在您的 Chrome 浏览器中,您应该看到以下屏幕:

React Native 调试最佳实践

您也可以在 Safari 中调试应用的 iOS 版本,而不必启用 Debug JS Remotely

怎么做?在 Safari 浏览器中,只需打开:

Preferences → Advanced → Select "Show Develop menu in menu bar

并选择 App 的 JSContext:

Develop → Simulator → JSContext

Safari 的 Web 检查器应打开,并应显示一个 Console 和一个 Debugger。每次重新加载应用程序时(使用实时 live reloadfast refresh 或通过手动重新加载),一个新的 JSContext 将被创建。只需选择 Automatically Show Web Inspectors for JSContexts,就可以避免手动选择最新的 JSContext。

Reactotron

如果您习惯将 Redux 用于 React Native 或 ReactJS 的状态管理,Reactotron 是调试状态的绝佳工具:

  • 查看应用状态
  • 显示 API 请求和响应
  • 执行快速的性能压测
  • 订阅应用的部分状态
  • 显示类似于 console.log 的消息
  • 使用 source-mapped 堆栈跟踪(包括 saga 堆栈跟踪)跟踪全局错误!
  • dispatch actions like a government-run mind control experiment
  • 使用 Redux 或 mobx-state-tree 热交换您应用的状态
  • 追踪你的 saga
  • 在 React Native 中显示图像浮层
  • 在 React Native 中跟踪您的异步存储

React Native 调试最佳实践

React Native Debugger

react-native-debugger 这是一个桌面应用程序,具有许多可调试应用程序的功能。至于应该提到的最重要的优点:

  • 它基于官方的 Remote Debugger 并提供更多功能。
  • 它包括来自 react-devtools-core 的 React Inspector。
  • 它包括 Redux DevTools,并使用 redux-devtools-extension 制作了相同的 API。

注意: 如果你使用了 0.62 版本以上的 React Native,请使用 React Native Debugger v0.11

React Native 调试最佳实践

Native Logs

根据官方的 React Native 文档,您可以轻松记录两种平台的报告:

$ npx react-native log-ios
$ npx react-native log-android

如果您需要进一步研究,可以使用特定于平台的 IDE(例如 XCodeAndroid Studio)来分析应用程序的本机代码并解决问题。

Flipper

Flipper 是用于调试 iOS、Android 和 React Native 应用程序的下一代平台。这是一个桌面应用程序,可让您灵活地检查、可视化和控制应用程序开发调试。这里很酷的功能是您可以通过扩展来更新 Flipper 的功能,例如:

如果您想集成 Redux 日志支持。

Flipper 支持 React Native Debugger 所有的功能,但是它也增加了很多。查看官方文档,以确保并可能创建自己的插件并支持社区。

React Native 调试最佳实践

React Native 调试最佳实践

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
洛竹
洛竹
Lv1
男 · 涂鸦智能 · 前端工程化
公众号「洛竹早茶馆」 微信「yang_jun_ning」 GitHub 「youngjuning」
文章
8
粉丝
5
获赞
1