Как загрузить домашний экран, не показывая экран входа в систему после успешного входа в систему? - PullRequest
0 голосов
/ 15 октября 2018

Есть два стекавигатора для навигации по экранам.Я хочу взять условие для isloggedin или нет.Если вы вошли в систему, выберите Appstack или AuthStack.Как это сделать в этом коде?Кто-нибудь может предложить мне изменения?

const AuthStack = createStackNavigator({
    Welcome: {screen: WelcomeScreen,
      navigationOptions: {
        header:null
      }},
    Login:  LoginScreen,
    Signup: SignupScreen,
    Forgot:ForgotScreen,
});

const AppStack =createStackNavigator(
    {
        Dashboard: DashboardScreen,
        ScanScreen:ScanScreen,
    });


export default createSwitchNavigator(
    {
      App:AppStack,
      Auth:AuthStack,
    },
    {   
      initialRouteName:'Auth',
    }
);

1 Ответ

0 голосов
/ 15 октября 2018

Где вы определяете и экспортируете свои маршрутизаторы, определяете и экспортируете функцию, которая принимает логический параметр isLoggedIn и возвращает соответствующий маршрутизатор на основе значения isLoggedIn.

const AuthStack = createStackNavigator({
    Welcome: {screen: WelcomeScreen,
      navigationOptions: {
        header:null
      }},
    Login:  LoginScreen,
    Signup: SignupScreen,
    Forgot:ForgotScreen,
});

const AppStack =createStackNavigator(
    {
        Dashboard: DashboardScreen,
        ScanScreen:ScanScreen,
    });

// This is the function that does the work, it will render
// the either Auth or App router, based on if you're logged in.
export const createRootNavigator = (isLoggedIn = false) => {
   if (isLoggedIn === false) {
      return <AuthStack/>
   } else {
      return <AppStack/>
   }
};

Тогдав компоненте вашего приложения (или где бы вы ни отображали свой маршрутизатор) нам нужно импортировать эту функцию и передать в нее, вошел ли пользователь в систему в данный момент.

'file-over.js' isприведенный выше код, т. е. код, который вы дали и в своем примере.

Грубый пример ниже.

// We import the file
import {createRootNavigator} from './file-above.js'

class App extends Component {

    constructor (props) {
        super(props);

        this.state({
           // Switching this will switch your stack router.
           loggedIn: false
        });
    }

    render () {

        const {loggedIn} = this.state;

        // Here we're rendering the router, passing in the 
        // loggedIn variable from state, this will dictate if the
        // Auth or App router is rendered.      
        return createRootNavigator(loggedIn); 
    }
}

Конечно, здесь не хватает поля 'loggedIn' в компонентах приложения.переключение состояний, поиграйте с кодом выше, измените значение loggedIn через определение конструктора, затем подключитесь к форме (ам) входа в систему и т. д.

...