在axios请求后无法通过React Navigation进行导航

时间:2018-10-07 07:32:40

标签: javascript react-native

我有问题。登录后我无法导航至HomeScreen。 有错误:

  

未处理的承诺拒绝(id:0):TypeError:未定义不是对象(正在评估'_this.props.navigation.navigate')。

这是我的代码:

    _submitLogin = () => {
        this.setState({ isLoading: true });

        if(!this.state.nim || !this.state.password) {
            this._handleError('Please enter your NIM and Password');
        } else {
                axios({
                method: 'post',
                url: 'http://192.168.43.114/api.connectUBK/auth',
                data: {
                    nim: this.state.nim,
                    password: this.state.password
                }
            }).then((response) => {
                 if(response.data.status === 'Failed'){
                    this._handleError(response.data.message);
                  } else {
                    this._makeSession(response.data.user); 
                  }
            }).catch((error) => {
                this._handleError('Failed to access ConnectUBK');
            });

        }
    };

    _makeSession = async (session) => {
        const user = JSON.stringify(session);
        await AsyncStorage.setItem('user', user);
        this.props.navigation.navigate('AuthLoading');
    }

    _handleError = (message) => {
        this.setState({ isLoading: false });
        ToastAndroid.showWithGravity(
                message,
                ToastAndroid.SHORT,
                ToastAndroid.CENTER
        );
    };

    _renderButton = () => {

        if(this.state.isLoading) {
            return <ActivityIndicator color='white' size='large' />;
        }

        return (
            <TouchableOpacity style={styles.buttonContainer} onPress={this._submitLogin}>
                <Text style={styles.buttonText}>Login</Text>
            </TouchableOpacity>
        );
    };

请帮助我。 我被卡住了

2 个答案:

答案 0 :(得分:2)

您是否正在将this.props.navigation.navigate作为道具传递给您向我们展示的组件?似乎您必须添加它,所以它失败了。您需要将navigation.navigate添加为组件的道具。

答案 1 :(得分:1)

为此问题,请在axios调用之外定义变量。

      let self = this; //  declared var 
      axios.get(url)
      .then(function (response) {


          self.props.navigation.navigate("Home") // use that var
         }
         else{
           Alert.alert("Invalid Username and Password")
         }

      })