Javascript 从一个屏幕导航到另一个屏幕时未处理的承诺拒绝

Javascript 从一个屏幕导航到另一个屏幕时未处理的承诺拒绝,javascript,react-native,Javascript,React Native,我想从Mtag屏幕导航到充值屏幕,但我面临未处理的错误承诺拒绝。我使用了this.props.navigation.navigate('充电),但没有成功。基本上,我听了API的响应,当响应为200时,会显示警报框,屏幕移到下一个屏幕。显示响应,但将屏幕移动到下一个屏幕时会出现错误。有办法吗 TypeError:Undefined不是对象 //这是MAINAPP.JS 从“React”导入React; 从“react native”导入{视图、文本、按钮}; 从“react navigati

我想从Mtag屏幕导航到充值屏幕,但我面临未处理的错误承诺拒绝。我使用了
this.props.navigation.navigate('充电)
,但没有成功。基本上,我听了API的响应,当响应为200时,会显示警报框,屏幕移到下一个屏幕。显示响应,但将屏幕移动到下一个屏幕时会出现错误。有办法吗

TypeError:Undefined不是对象

//这是MAINAPP.JS
从“React”导入React;
从“react native”导入{视图、文本、按钮};
从“react navigation”导入{createStackNavigator,createAppContainer};
从“/screens/mtag”导入mtag;
从“/屏幕/充值”导入充值;
const AppNavigator=createStackNavigator(
{  
Mtag:Mtag,
充电:充电
},  
{  
初始路由名称:“Mtag”
}  
);  
const AppContainer=createAppContainer(AppNavigator);
导出默认类App扩展React.Component{
render(){
返回;
}  
}  
//这是我的mtag.js
//在从API获得响应后,我想从这个屏幕导航到另一个屏幕
从“React”导入React,{useState};
进口{
样式表、文本、键盘、状态栏、列表视图
}从“反应本机”;
从“本机基础”导入{容器、标题、输入、标签、内容、标题、卡片、卡片、按钮、正文};
从“react navigation”导入{createStackNavigator,createAppContainer,withNavigation};
//从“/屏幕/充值”导入充值;
常量mtag:()=>React$Node=()=>{
//const[email,setEmail]=useState();
//const[password,setPassword]=useState();
const[mtag_id,setmtag_id]=useState();
const[token,setToken]=useState();
const[balance,getBalance]=useState();
validateUser=async()=>{
//警报(mtag_id);
待命http://SERVER_API/api/v1/user/login'
,{
方法:'POST',
标题:{
“接受”:“应用程序/json”,
//“内容类型”:“应用程序/x-www-form-urlencoded”
“内容类型”:“应用程序/json”
},
正文:JSON.stringify({“email”:”ABC@YAHOO,COM',password:'ABC123'}),
}).then(loginres=>loginres.json())
。然后(loginresData=>{
//警报(resData.token);
如果(loginresData.status==“200”)
{
//警报(“正常”)
//警报(resData.token)
取('http://SERVER_API/api/v1/recharge/getInfo'
,{
方法:'POST',
标题:{
“接受”:“应用程序/json”,
//“内容类型”:“应用程序/x-www-form-urlencoded”
“内容类型”:“应用程序/json”,
“授权”:loginresData.token,
},
正文:JSON.stringify({“mtag_id”:mtag_id}),
}).then(infores=>infores.json())
。然后(inforesData=>{
如果(inforesData.status==“200”){
警报(inforesData.status)
this.props.navigation.navigate('充电');
}
否则{
警报(inforesData.status)
}
console.log(inforesData);
});
}
其他的
{
警报(loginresData.status);
}
console.log(登录数据);
});
}
返回(
M-Tag充电
setmtag_id(值)}
键盘类型='numeric'
maxLength={8}
/>
充电
);

};您无法在钩子中使用
关键字。简单使用

props.navigation.navigate('recharge');
您还没有在validateUser函数中使用
.catch
。然后
是后续响应,
。catch
是拒绝响应。用下面给出的代码替换validateUser函数

 validateUser = async () => {
    //alert(mtag_id);
    await fetch('http://SERVER_API/api/v1/user/login', {
      method: 'POST',
      headers: {
        Accept: 'application/json',
        //'Content-Type': 'application/x-www-form-urlencoded'
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({email: 'ABC@YAHOO,COM', password: 'ABC123'}),
    })
      .then(loginresData => {
        //alert(resData.token);
        if (loginresData.status == '200') {
          //alert('OK')
          //alert(resData.token)
      fetch('http://SERVER_API/api/v1/recharge/getInfo', {
        method: 'POST',
        headers: {
          Accept: 'application/json',
          //'Content-Type': 'application/x-www-form-urlencoded'
          'Content-Type': 'application/json',
          Authorization: loginresData.token,
        },
        body: JSON.stringify({mtag_id: mtag_id}),
      })
        .then(infores => infores.json())

        .then(inforesData => {
          if (inforesData.status == '200') {
            alert(inforesData.status);
            props.navigation.navigate('recharge');
          } else {
            alert(inforesData.status);
          }

          console.log(inforesData);
        });
    } else {
      alert(loginresData.status);
    }
    console.log(loginresData);
  })
  .catch(error => {
    console.warn(error);
  });
  };

this.props.navigation.navigate('recharge')中删除
this
word是否有效