TypeError: expected dynamic type 'string', but had type 'object'

来源:互联网 发布:剑三喵姐捏脸数据 编辑:程序博客网 时间:2024/05/22 14:07

将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

或Github地址:
https://github.com/facebook/react-native/blob/0a712f5335d1bf04c4ff93a79b14c9e23dbd5831/Libraries/Alert/Alert.js

阅读全文
0 0