如何使用React Native在if条件内处理道具导航

时间:2019-05-23 23:34:04

标签: javascript reactjs react-native

我对道具导航有疑问,我想知道如果条件为真,如何导航其他屏幕?我有用户需要登录的模块,我正在使用ReactJS api。展望未来,我可以在api中获得正确的响应,但是if语句中存在一个问题,即我的道具未定义不是对象。

我这里有我编写的代码,

    AsyncStorage.getItem('authorization_code', (err, result) => {
      let token = result;
      axios({
          method: 'post',
          url: 'http://1xx.xx.x.xx:8002/api/auth/me?token=',
          headers: {"Authorization" : `Bearer ${token}`}
      }).then(response => {
          const email = response.data.email;
          const user_type = response.data.user_type;

          AsyncStorage.setItem('USERMAIL',email.toString());
          AsyncStorage.setItem('USERTYPE',user_type.toString());

          if(user_type == 1) {
            this.props.navigation.push('Dashboard');
          }
          else if(user_type == 3) {
            this.props.navigation.push('Dashboard');
          }

      })
});

谢谢。

1 个答案:

答案 0 :(得分:1)

这是因为您正在访问另一个closure中的this。要解决此问题,您可以存储局部变量并从传递给then的函数中访问它。常见的约定是使用要持久化到闭合的that来创建一个名为this的新变量。

getItemFromStorage() {

  // this line is the key
  const that = this;

  AsyncStorage.getItem('authorization_code', (err, result) => {
    let token = result;
    axios({
        method: 'post',
        url: 'http://1xx.xx.x.xx:8002/api/auth/me?token=',
        headers: {"Authorization" : `Bearer ${token}`}
    }).then(response => {
        const email = response.data.email;
        const user_type = response.data.user_type;

        AsyncStorage.setItem('USERMAIL',email.toString());
        AsyncStorage.setItem('USERTYPE',user_type.toString());

        // now you can access that to obtain the props
        if(user_type == 1) {
          that.props.navigation.push('Dashboard');
        }
        else if(user_type == 3) {
          that.props.navigation.push('Dashboard');
        }
    })
  });
}

有关此here

的更多信息