react-naitve框架问题
1.全局设置Text的属性
0.60.5之后
import {Text} from 'react-native';
const sourceRender = Text.render;
Text.render = function render(props, ref) {
return sourceRender.apply(this, [
{
...props,
style: [{fontFamily: ''}, props.style],
},
ref,
]);
};
0.60.5之前
import React from 'react';
import { StyleSheet, Text } from 'react-native';`
const styles = StyleSheet.create({
defaultFontFamily: {
fontFamily: '',
}
});
const oldRender = Text.prototype.render;
Text.prototype.render = function (...args) {
const origin = oldRender.call(this, ...args);
return React.cloneElement(origin, {
style: [origin.props.style, styles.defaultFontFamily]
});
};
2.在Android上首先给Touchable设置了position,这时候view被别的view覆盖,再给Touchable设置elevation,此时Touchable显示出来了,但是这个时候点击Touchable是触发不了点击事件的,之前一直以为是Touchable父view的点击事件拦截了Touchable的点击,但是看到父view的onStartShouldSetResponderCapture设置的是false,最后发现是Touchable需要设置zIndex
3.导入的第三方,已经安装了 但是import在webstorm还是显示module未安装,这是因为该插件使用了index.android.js和index.ios.js的形式,这种情况在插件内部给它加个index就行了
4.Cannot run program "node" (in directory "/Users/XXX/RN/project_rn/android"): error=2, No such file or directory
查看androidstudio gradle jdk版本
5.导入插件的时候
比如 import 'core/modifyPrototypes'; 可以这么写但是会报错
Error: Unable to resolve module core/modifyPrototypes from /Users/zhangliang/Desktop/mt/code/meta_orc_rn/index.js: core/modifyPrototypes could not be found within the project or in these directories:
node_modules
这是因为就算当前文件和core是同一个目录,前面如果不加./的话,系统还是会去node_modules里面查找
6.transform skewX skewY Android上无效
- Android上measureInWindow返回全是undefined,由于安卓中视图外的元素不会进行绘制导致有一些屏幕外的元素无法获得真实的偏移值,只要在View上把collapsable={false}这个属性加上去既可以解决。
8.Android打包之后无法请求网络
在application中插入 android:usesCleartextTraffic="true"
9.Android通过fetch上传图片,fileName不支持中文,需要加密后端再解密
/**
- FormData 上传File的时候 文件名Android不能传入中文字符需要用该方法加密
- @param str
/
export const enCoderUrl = (str: string) => {
let encodeStr = encodeURIComponent(str); //不会对这些进行编码 - _ . ! ~ * ' ( )
encodeStr = encodeStr.replace(/!/g, '%21'); //转换!
encodeStr = encodeStr.replace(/*/g, '%2A'); //转换
encodeStr = encodeStr.replace(/'/g, '%27'); //转换'
encodeStr = encodeStr.replace(/(/g, '%28'); //转换(
encodeStr = encodeStr.replace(/)/g, '%29'); //转换)
encodeStr = encodeStr.replace(/[/g, '%5B'); //转换[
encodeStr = encodeStr.replace(/]/g, '5D'); //转换]
return encodeStr;
};
10.FlatList修改list数据不刷新,通过extraData设置一个refreshFlag,通过修改refreshFlag来刷新
11.服务器返回数据Long类型丢失精度
const JSONBigString = require('json-bigint')({storeAsString: true});
data = JSONBigString.parse(data);
12.TouchableOpacity设置style透明度有bug 设置opacity 0.5之后需要点击才能生效