2016-12-27 122 views

回答

4

我已经解决了这个问题,这样做:

_onLoad(state) { 
    //I check the url to see if everything goes right 
    if (state.url.indexOf(BASEURL + '/auth/success') != -1) { 
     let token = state.url.split("token=")[1]; 
     token = token.substring(0, token.length - 4); 
     //Here I'm caming back 
     NavigationsActions.back(); 
     //In your case you might do something like this: 
     NavigationsActions.replaceRoute({ 
      id: 'your route id' 
     }); 
     SessionActions.setSession(token); 
    } 
} 

,我发现了一个伟大的教程,这有助于我了解它是如何工作here

这里有我的整个组件看起来像:

import React, { Component } from 'react'; 
import { 
    StyleSheet, 
    WebView, 
    Text 
} from 'react-native'; 
import NavigationsActions from '../../actions/NavigationsActions'; 
import NavigationConstants from '../../constants/NavigationConstants'; 
import RouteConstants from '../../constants/RouteConstants'; 
import SessionActions from '../../actions/SessionActions'; 

var BASEURL = 'http://localhost:8080'; 

class FacebookLogIn extends Component { 
    render() { 
    return (
     <WebView onNavigationStateChange={this._onLoad} style={styles.container} source={{ uri: BASEURL + '/auth/facebook' }}/> 
    ); 
    } 

    _onLoad(state) { 
    console.log(state.url); 
    if (state.url.indexOf(BASEURL + '/auth/success') != -1) { 
     let token = state.url.split("token=")[1]; 
     token = token.substring(0, token.length - 4); 
     NavigationsActions.back(); 
     SessionActions.setSession(token); 
    } 
    } 
} 

const styles = StyleSheet.create({ 
    container: { 
    flex: 1 
    } 
}); 

module.exports = FacebookLogIn; 
+0

'onNavigationStateChange'的伎俩。谢谢! – ravigadila

+0

请将其标记为接受答案!谢谢!!! –