带有StackNavigation的react-native expo中的条件HomeScreen

时间:2017-08-06 20:27:10

标签: react-native redux

我正在尝试创建一个条件HomeScreen,如果用户将“UserID”保存到手机,它应该将它们带到“PlacesScreen”,否则让它加载“LoginScreen”。我正在使用RedN的StackNavigation,大约两周时间学习反应原生。

function nav (state = firstState(), action) {
  let nextState;
  switch (action.type) {

    case 'Home':
      nextState = AppNavigator.router.getStateForAction(
        NavigationActions.navigate({routeName: 'Home'}),
        state
      );
      return nextState;
      break;

    case NavActionTypes.NAVIGATE_PLACES:
         nextState = AppNavigator.router.getStateForAction(
         NavigationActions.navigate({ routeName: 'Places' }),
         state
        );
        return nextState;
        break;
}

...等 我想将reducer中的初始状态设置为依赖于天气,或者不在手机上保存ID。我非常新的反应原生和编码一般,即时通讯19,所以任何帮助将不胜感激!如果您需要更多代码来帮助,请告诉我,我将发送github链接。 先感谢您! 库珀

1 个答案:

答案 0 :(得分:1)

由于redux建议保持Reducer纯净,我会将导航逻辑从reducer中删除并将其放入组件中。 另外,我建议在组件安装期间检查LoginScreen上的状态,如果状态包含UserID,则将导航状态重置为PlacesScreen。

e.g。

import store from '../storeLocation'
export class LoginScreen extends React.Component {

   ...

   componentWillMount(){
     if(store.getState().userID !== "") 
       this.props.navigation.dispatch(NavigationActions.reset({
         index: 0,
         actions: [
           NavigationActions.navigate({ routeName: 'Places'})
         ]
       }));
   }

   ...

 }