2

Я создал кнопку входа в систему с помощью Facebook SDK. После входа в систему приложение переходит на второй экран (NavigatorIOS). На этом втором экране пользователь может вернуться на экран входа в систему, используя навигацию (кнопка «Назад»).React native - запретить пользователю возвращаться к экрану входа в систему

Как я могу помешать пользователю вернуться на экран входа в систему, если он уже вошел в систему?

index.ios.js

import React, { Component } from 'react' 

import { 
    AppRegistry, 
    StyleSheet, 
    NavigatorIOS 
} from 'react-native' 

import LoginView from './src/login-view' 

class MyApp extends Component { 
    render() { 
    return (
     <Provider store={store}> 
     <NavigatorIOS 
      initialRoute={{ 
      component: LoginView, 
      title: 'MyApp', 
      index: 0 
      }} 
     /> 
     </Provider> 
    ); 
    } 
} 
AppRegistry.registerComponent('MyApp',() => MyApp); 

LoginView

import React, {Component} from 'react' 
import { 
    View, 
    Text, 
    StyleSheet, 
    TouchableHighlight, 
} from 'react-native' 

import CategoryView from './category-view' 

import {LoginButton, AccessToken, GraphRequest, GraphRequestManager} from 'react-native-fbsdk' 

class LoginView extends Component { 
    goToCategoryView =() => 
     this.props.navigator.push({ 
      title: 'Categories', 
      component: CategoryView, 
     }) 

    render(){ 
     return(
      <View style={styles.container}> 
       <LoginButton 
        readPermissions={['public_profile','email']} 
        onLoginFinished={ 
         (error, result) => { 
          if (error) { 
           console.log('login has error: ', result.error) 
          } else if (result.isCancelled) { 
           console.log('login is cancelled.') 
          } else { 
           AccessToken.getCurrentAccessToken().then((data) => {  
            this.goToCategoryView() 
           }) 
          } 
         } 
        } 
        onLogoutFinished={() => {console.log('logged out')}} /> 
      </View> 
     ) 
    } 
} 

export default LoginView 

ответ

2

Используя Navigator, вы можете использовать метод resetTo(startingRoute) для сброса стека и запуска нового нового маршрута с пройденного вами маршрута. параметр. При этом вы не сможете перемещаться назад в стеке.

Если я не недопонимание вашего компонента, вы должны использовать что-то вроде этого:

goToCategoryView =() => { 
    //Replace here push with resetTo 
    this.props.navigator.resetTo({ 
     title: 'Categories', 
     component: CategoryView, 
    }) 
} 

Facebook Docs

+0

Спасибо за ваш ответ. Хороший трюк, просто попробовал. Он работает нормально. – John

+0

Рад помочь вам! Не могли бы вы проголосовать за PLS? Спасибо –

+0

Последний вопрос на эту тему - после входа пользователя в систему, если я обновляю симулятор, он возвращается на экран входа в систему, на котором отображается кнопка продолжения Facebook. Возможно ли предотвратить возврат к этому экрану при обновлении/перезагрузке? – John

0

Как насчет поп-музыки() на экране входа в систему выключения, а затем нажать() новый экран на или попробовать заменить()? [

Еще одна вещь, вы должны сделать чек на экране входа в систему, чтобы узнать, вошел ли пользователь в систему и вывешивают вход вместо входа. (Если вы используете reducex для хранения токена пользователя, вы можете проверить, существует ли токен и все еще действителен)

+0

Спасибо за ваш вклад. В конце я использовал resetTo (route). – John

+0

без проблем. resetTo звучит лучше :) – user1736525