React Native安卓真机跳转至第二个页面时应用崩溃问题
已知信息:
- 应用通过
expo start --web在浏览器运行正常 - 安卓真机跳转至ProductDetails页面立即崩溃,移除该页面
标签内代码后可正常跳转 - axios接口能返回正确JSON数据
以下是针对性排查和解决方向:
排查平台专属代码/组件
检查内是否使用了仅web支持的API(比如 window、document对象操作)或第三方库,这类代码在安卓原生环境会直接引发崩溃。比如某些依赖DOM的富文本编辑器、web专属的动画库,替换为React Native原生支持的组件即可。校验样式兼容性
React Native web与原生平台的样式支持存在差异,比如vh/vw单位、部分CSS阴影写法在原生环境可能解析异常。逐行注释内的样式代码,定位引发崩溃的样式规则,替换为React Native官方支持的样式属性(比如用 shadowColor/shadowOffset等原生阴影属性替代web的box-shadow)。处理数据渲染的边界情况
尽管接口返回正确数据,但真机环境下未处理的空值/undefined可能导致崩溃(web端会自动容错)。检查内渲染数据的地方,比如 {product.price}要改为{product?.price ?? 0},避免传递undefined给组件props(比如Image的source属性不能为undefined)。验证第三方组件兼容性
如果内使用了第三方UI组件,确认该组件是否支持React Native原生平台(部分组件仅适配expo web)。临时替换为官方组件(比如用 Text替代第三方富文本组件)测试,若崩溃消失则说明是组件兼容性问题。查看真机崩溃日志
连接安卓真机并开启开发者调试模式,通过expo start连接设备后打开Chrome调试工具的Console面板,查看具体报错信息;或在终端执行adb logcat *:E命令,获取安卓系统级的崩溃日志,精准定位问题代码。优化内存与性能
若内渲染了大量数据(比如未优化的长列表),真机内存不足会引发崩溃。改用 FlatList替代普通ScrollView,或实现数据分页加载,减少单次渲染的节点数量。
内容的提问来源于stack exchange,提问作者Mobygo

