react-native 踩坑记

最近在使用react-native的时候遇到了很多坑,这里给大家分享下

一.样式

react-native 虽然支持flex布局,但是所有的样式均是css样式的一个很小的集合,尤其是在安卓机下问题尤为凸显:

1.View内部的元素千万不要超出父级的范围,iso上问题倒是不大,安卓上就什么超出的都看不到了
2.lineHeight 可以用,不过千万不要写成小数,否则安卓上会直接崩溃
3.rn的样式不存在继承的情况,所以基本上每个节点都要写style,真的是体力活
4.如果Text的父级元素设置了背景颜色,那么ios下Text的背景颜色也是父级的背景颜色,要么自己写个Text重置下样式,要么就遇到了再改
5.react-native的字号是没有设置单位的,所以会随着系统设置的字体大小而变化,我也不知道这是不是坑,不过貌似有的app也没有管这个

二.异常

react-native 在发生js异常的时候,debug的时候会直接红屏幕,但是再release的时候直接会崩溃退出,解决办法

import ErrorUtils from "ErrorUtils" //这里应该做个判断,如果不是debug的才做这样的异常全局处理
ErrorUtils.setGlobalHandler((e)=>{  //发生异常的处理方法,当然如果是打包好的话可能你找都找不到是哪段代码出问题了
  Alert.alert("异常",JSON.stringify(e))
});

三.fetch

react-native虽然自带有fetch,不过在使用的时候发现了一个问题,如果需要获取http的header头的时候问题就来了,可能得到的是一些千奇百怪的样式,这并不是react-native的错,而是第三方的 whatwg-fetch 留下的坑,当然也有人再github上跟react-native反映过这个问题,不过得到的解决方案都很坑,唯有一个办法,就是拷贝自己修改,修改如下:

1.注释该注释的
(function(self) {
    ‘use strict‘;
   //注释这里,不然总是用的是全局的fetch
    // if (self.fetch) {
    //     return
    // }
2.修改该修改的
function parseHeaders(rawHeaders) {
        var headers = new Headers()     //把\t\n改成\t,因为一般header都是用\n来分割的
        rawHeaders.split(‘\n‘).forEach(function(line) {
        //rawHeaders.split(‘\t\n‘).forEach(function(line) {
                var parts = line.split(‘:‘)
                var key = parts.shift().trim()
                if (key) {
                    var value = parts.join(‘:‘).trim()
                    headers.append(key, value)
                }
            })
        }
        return headers
    }
3.直接import你改好的文件,fetch就可以用了

四.Modal

Mode控件在使用的时候要注意了,因为这个是rn提供的,并且也写的很清楚是最高层级的一个弹出层,所以你想要又打开Model又要跳转基本是无望的了,所以建议不要使用这个,最好是使用第三方的控件,我们用的是 react-native-modalbox + 高阶控件 实现的全遮盖的弹出层

五.点击屏幕其他位置关闭的菜单

这类菜单有个共同的特点就是点击屏幕其他地方然后菜单就关闭,我们的解决办法就是用自己写的 react-native-modalbox + 高阶控件 也就是说放在一个弹出层里面,当然可以试试把当前页面套进一个大的 TouchableWithoutFeedback 里面

暂时就想到了这些,等我好好总结下再写添加吧

时间: 2024-08-08 21:48:48

react-native 踩坑记的相关文章

React – Native 踩坑记

运行的时候先报错说can’t be opened because it is from an unidentified developer,这是osx自己安全设置搞太高,去安全选项改了(allow apps download from anywhere)之后.又报错说permission问题,于是在终端用(chmod -R 755 /项目根目录)(主意:755后面一定要加空格)把所有文件都改成755权限,然后就可以完美运行了. 用模拟器和真机调试时,环境不同,在工程AppDelegate.m的-

react native 踩坑之 SectionList state更新 不执行render重新渲染页面

官方文档中指出 SectionList 本组件继承自PureComponent而非通常的Component,这意味着如果其props在浅比较中是相等的,则不会重新渲染.所以请先检查你的renderItem函数所依赖的props数据(包括data属性以及可能用到的父组件的state),如果是一个引用类型(Object或者数组都是引用类型),则需要先修改其引用地址(比如先复制到一个新的Object或者数组中),然后再修改其值,否则界面很可能不会刷新.(译注:这一段不了解的朋友建议先学习下js中的基本

踩坑记:httpComponents 的 EntityUtils

今天写的一个服务程序,有人报告获得的数据中文乱码,而我是用 apache 通过 httpComponents 去取得数据的,于是开启日志的 debug 级别. 在日志里果然发现中文不见了,有乱码出现: 2014-07-02 16:35:01.348 DEBUG [Wire.java:86] http-outgoing-8 << "<?xml version="1.0" encoding="UTF-8"?>... subject=&q

Spark踩坑记——数据库(Hbase+Mysql)转

转自:http://www.cnblogs.com/xlturing/p/spark.html 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streaming进行实时的数据流处理时,我需要将计算好的数据更新到hbase和mysql中,所以本文对spark操作hbase和mysql的内容进行总结,并且对自己踩到的一些坑进行记录. Spark Streaming持久化设计

Spring @Transactional踩坑记

@Transactional踩坑记 总述 ? Spring在1.2引入@Transactional注解, 该注解的引入使得我们可以简单地通过在方法或者类上添加@Transactional注解,实现事务控制. 然而看起来越是简单的东西,背后的实现可能存在很多默认规则和限制.而对于使用者如果只知道使用该注解,而不去考虑背后的限制,就可能事与愿违,到时候线上出了问题可能根本都找不出啥原因. 踩坑记 1. 多数据源 事务不生效 背景介绍 ? 由于数据量比较大,项目的初始设计是分库分表的.于是在配置文件中

[转]Spark 踩坑记:数据库(Hbase+Mysql)

https://cloud.tencent.com/developer/article/1004820 Spark 踩坑记:数据库(Hbase+Mysql) 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值. 最近一个实时消费者处理任务,在使用spark streaming进行实时的数据流处理时,我需要将计算好的数据更新到hbase和mysql中,所以本文对spark操作hbase和mysql的内容进行总结,并且对自己

记一次 Spring 事务配置踩坑记

记一次 Spring 事务配置踩坑记 问题描述:(SpringBoot + MyBatisPlus) 业务逻辑伪代码如下.理论上,插入数据 t1 后,xxService.getXxx() 方法的查询条件会不满足,会查询不到数据.结果事与愿违,后一次的查询,居然查到了数据. void saveXxx(){  xxService.getXxx(); // 查到一条数据 data1  xxService.insert(); // 插入一条数据 t1  xxService.getXxx(); // 查到

阿里云ECS搭建Kubernetes集群踩坑记

阿里云ECS搭建Kubernetes集群踩坑记 [TOC] 1. 现有环境.资源 资源 数量 规格 EIP 1 5M带宽 ECS 3 2 vCPU 16 GB内存 100G硬盘 ECS 3 2 vCPU 16 GB内存 150G硬盘 SLB 2 私网slb.s1.small 2. 规划 坑: 上网问题,因为只有一个EIP,所有其它节点只能通过代理上网; 负载均衡问题,因为阿里不支持LVS,负载均衡TCP方式后端又不支持访问负载均衡,HTTP和HTTPS方式,只支持后端协议为HTTP; 为了避免上

HttpWebRequest 改为 HttpClient 踩坑记-请求头设置

HttpWebRequest 改为 HttpClient 踩坑记-请求头设置 Intro 这两天改了一个项目,原来的项目是.net framework 项目,里面处理 HTTP 请求使用的是 WebReauest,但是 WebRequest 已经不再推荐使用了,你如果在项目中使用的话,编译器会警告, WebRequest已过时,新项目要 .Net standard 重写就直接 HttpClient 来处理 HTTP 请求了,在改的过程中踩了几个坑,记录一下 请求头处理 HttpClient 通常

windows container 踩坑记

windows container 踩坑记 Intro 我们有一些服务是 dotnet framework 的,不能直接跑在 docker linux container 下面,最近一直在折腾把它部署在 windows container 下,折腾的有点恶心,记录一下. Windows Container 介绍 Windows Container 是微软在 Windows 上的虚拟化实践,它可以提供操作系统级别的虚拟化. 通过我们说的容器化大多是指 Linux Container,基于 linu