最近升级RN 0.62 放出自己碰到的一些坑.
总的来说0.61.5->0.62 改变还是有些的,如果你的项目第三方比较少升级还是挺好升的.
这里提醒,
公司开发的时候,尽量自己写轮子,自己去印证.
这样后期会很愉快.
iOS
首先先看下升级助手,大概的改动
升级助手
我们可以看到jscallinvoker 是有被删掉的, 所以项目里删除就好了
到这里 基本上就结束了,
当然0.62又添加了自己的debug 工具 叫Flipper
看样子还是不错的,但是项目中 还没时间来集成这个.
还有个重要的更新:
就是黑暗模式:
官方文档是这样的
由此看来 RN 以后使用hook的频率会很高,看来小伙伴要 很优雅的去继承了
也要有一种思想就是 函数组件,而不是类组件了
import {Text, useColorScheme} from 'react-native';
const MyComponent = () => {
const colorScheme = useColorScheme();
return useColorScheme(): {colorScheme} ;
};
下面说重点:
TypeError: Super expression must either be null or a function
头疼的事情来了,无法跟踪.
估计很多小伙伴估计也都百度过了,
很多人都说是继承的问题
例如:
export default class Base extends React.Component {
// netInfoListen: any;
constructor(props) {
super(props);
this.setStatusBar()
this.state = {
};
}
//import React, { Component } from 'react';
导入的问题,有些代码可能写错 不要再'react-native'里导入
大家要看看自己的代码 翻查一遍
最终也是类似这个问题
我发现我的第三方插件中有一些类是这样继承的
export default class NavigationButton extends TouchableOpacity
//基本是继承的问题,
//项目里碰到很多这种情况,并且很难跟踪,最后全部抽出来变成自己组件.花了大量时间
//改成
export default class NavigationButton extends React.Component
OK
很多第三方语法会出现问题.
希望可以帮助到小伙伴
Android
更改之后 安卓是可以顺利
如果你的项目继承了codepush
那么.... 继续看....
找到settings.gradle
//注意要把 apple from......... 放到 react-native-code-push 前面
//这里等到codepush 更新吧 临时解决方案
apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
include ':app'
include ':react-native-code-push'
project(':react-native-code-push').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-code-push/android/app')