react-native 如何在 facebook 登录和注销后刷新页面

react-native how to refresh the page after facebook log and logout

使用 React-native 构建我的第一个移动应用程序。 我在后端使用 Parse。 4 个文件,3 个屏幕: index.io.jsfb_login.jsuser_page.jstheme_list.js

render: function() {
    var render_screen;
    if (Global.is_signed_in()){

        return <NavigatorIOS
            style={styles.container}
            ref='nav'
            initialRoute={{
                title: 'Tour Champ',
                component: ThemeList,
                rightButtonTitle: tc.user.displayName.split(' ')[0],
                onRightButtonPress: this._handleUserDataPress
            }}/>;

    }else{
        render_screen = 'authenticate';
    }

    return (
        <Navigator
            initialRoute={{ id: render_screen}}
            renderScene={this.renderScene}
            configureScene={(route) => {
                if (route.sceneConfig) {
                    return route.sceneConfig;
                }

                return Navigator.SceneConfigs.FloatFromRight;
            }}
            onBack={() => {
                if (route.index > 0) {
                    navigator.pop();
                }
            }}
        />

    );
}

    renderScene(route, nav) {
    console.log('in renderScene');
    switch (route.id) {
        case 'authenticate':
            return <LoginScreen navigator={nav} />;
        case 'theme_list':
            return <ThemeList navigator={nav} />;
        default:
            return  <View>Error</View>;
    }
},

我可以登录和注销,问题是我必须手动刷新才能获得主页/登录页面(在 login/logout 之后)。 问题是: 从 fb_login.js 方法登录后我应该做什么:

login_user(fb_user, password){
var that = this;
Parse.User.logIn(fb_user.id, password).then(function(user) {
  console.log('here in logged_in');
  tc.user = user.attributes;
  Global.initializeUser(user);
  //that.props.navigator.pop();
  //that.props.navigator.replace({id: 'theme_list'});
  that.setState({result: 'logged_in', user: user.attributes});
}, function(msg) {
  that.setState({result: 'failure logged_id'});
});

},

好的,所以我最终使用来自这个 post 的事件发射器来完成它 https://colinramsay.co.uk/2015/07/04/react-native-eventemitters.html

代码如下所示: index.io.js

var EventEmitter = require('EventEmitter');
var Subscribable = require('Subscribable');

window.EventEmitter = EventEmitter;
window.Subscribable = Subscribable;

    var TourChampIOs = React.createClass({
    mixins: [Subscribable.Mixin],
   componentWillMount() {
        this.eventEmitter = new EventEmitter();
    },

    componentDidMount() {

        this.addListenerOn(this.eventEmitter, 'logout_success',  this.logoutCallback);
    },
   logoutCallback(args){
        p('logout callback');
        this.setState({
            fake: args.someArg
        });
    },

fb_login.js

 login_user(fb_user, password){
var that = this;
Parse.User.logIn(fb_user.id, password).then(function(user) {
  tc.user = user.attributes;
  Global.initializeUser(user);
  that.props.navigator.pop();
  that.setState({result: 'logged_in', user: user.attributes});
  that.props.props.events.emit('fb_login_success', { someArg: 'argValue' });
}, function(msg) {
  that.setState({result: 'failure logged_id'});
});

},