将React Native的版本升级到最新的0.45.1之后,出现如下错误:
通过调试无法定位错误的地方,于是从错误提示入手,注意到错误发生在调用方法showAlert的时候,猜测是Alert参数类型出错,回头看使用Alert的地方,代码如下:
...
.catch(error => {
Alert.alert('提示', error, [
{text:'确定' }])
this.state.logining = false;
})
...
很明显,error为object 不是 string,查看Alert.js的源码,如下:
class Alert {
static alert(
title: ?string,
message?: ?string,
buttons?: Buttons,
options?: Options,
type?: AlertType,
): void {
if (Platform.OS === 'ios') {
if (typeof type !== 'undefined') {
console.warn('Alert.alert() with a 5th "type" parameter is deprecated and will be removed. Use AlertIOS.prompt() instead.');
AlertIOS.alert(title, message, buttons, type);
return;
}
AlertIOS.alert(title, message, buttons);
} else if (Platform.OS === 'android') {
AlertAndroid.alert(title, message, buttons, options);
}
}
}
可见参数message为string类型,修改如下,重新run不再报错:
...
catch(error => {
Alert.alert('提示', error.message, [
{text:'确定' }])
this.state.logining = false;
})
...
注:
Alert.js的本地路径为:
your react_native project/node-modules/react-native/Libraries/Alert/Alert.js