如何将React Native应用程序导航重置为React Navigation的当前屏幕

时间:2017-08-04 22:48:38

标签: reactjs react-native react-navigation

我正在尝试构建我的第一个React Native应用程序,但我遇到了导航问题。 我的应用程序在Stack Navigator中有三个屏幕

#define ArrayAccess2D_n2(a, n1, n2, i1, i2) (a)[ i2+n2*i1 ]


void halo_shell_rho(float boxsize, float *halo_pos, float *halo_R, int halo_number,\ 
int halo_start, int halo_end, float *par_pos, long long par_number,\ 
int shell_bins, float rmax_fac, float *out_shell_den){

    float temp;

    long long iter_sfs=0, iter_sfc=0, iter_ufs=0, iter_ufc=0;
    int dim=3;

    float par_posx, par_posy, par_posz, dist;
    float halo_posx, halo_posy, halo_posz, halo_rad;
    int i=0, ini_j=0, vol_j=0;
    int a=0, b=0;
    long long k=0;

    #pragma omp parallel for private(i, ini_j, vol_j, a, b, k)
    for(i=halo_start; i<=halo_end; i++){
            printf("halo %d\n", i);
            float count[shell_bins];
            float volume[shell_bins];

            for(ini_j=0; ini_j<shell_bins; ini_j++){
                    count[ini_j] = 0;
                    volume[ini_j] = 0; }

            halo_posx = ArrayAccess2D_n2(halo_pos, dim, halo_number, 0, i);
            halo_posy = ArrayAccess2D_n2(halo_pos, dim, halo_number, 1, i);
            halo_posz = ArrayAccess2D_n2(halo_pos, dim, halo_number, 2, i);
            halo_rad = halo_R[i];

            for(vol_j=0; vol_j<shell_bins; vol_j++){

                    volume[vol_j] = shell_volume((vol_j+1)*halo_rad*rmax_fac/(shell_bins*1000), vol_j*halo_rad*rmax_fac/(shell_bins*1000)); }

            for(k=0; k<par_number; k++){

                    par_posx = ArrayAccess2D_n2(par_pos, par_number, dim, k, 0);
                    par_posy = ArrayAccess2D_n2(par_pos, par_number, dim, k, 1);
                    par_posz = ArrayAccess2D_n2(par_pos, par_number, dim, k, 2);

                    dist = pb_distance(boxsize*1000, halo_posx, halo_posy, halo_posz, par_posx, par_posy, par_posz); //1000 for boxsize in Mpc

                    if(dist <= 2*rmax_fac*halo_rad){

                            for(a=0; a<shell_bins; a++){

                                    if((dist <= halo_rad*(a+1)*rmax_fac/shell_bins) && (dist >= halo_rad*a*rmax_fac/shell_bins)){

                                            count[a] += 1; }
                            }
                    }
            }

            for(b=0; b<shell_bins; b++){

            out_shell_den[(i-halo_start+0*(1+halo_end-halo_start))*shell_bins+b] = count[b]/volume[b]; 
            //out_shell_den has shape (2, halo_number, shell_bins), 0 for edge, 1 for density
            out_shell_den[(i-halo_start+1*(1+halo_end-halo_start))*shell_bins+b] = (2*b+1)*rmax_fac/(shell_bins*2);
            }
    }

我的导航器

Home 
Login 
User (User screen again is a Tab Navigator with three screens UserProfile, UserHome, UserSettings) 

初始路线为主页,因此应用程序在主屏幕中打开,从那里点击登录进入登录屏幕

现在在我的登录组件中,成功验证后,我将重定向到用户屏幕。

当我进入用户界面时,我看到一个后退按钮并点击它将我带回登录界面

我想在成功验证时重置导航堆栈并将用户屏幕设置为root,因此在Login函数中我添加了

const Navigator = StackNavigator(
  {
   Home: {
      screen: HomeScreen
    },
    Login: {
      screen: LoginScreen,
    },
   User: {
      screen: UserTabNavigator,
    }
  },{
    initialRouteName: 'Home'
  },
  {
    navigationOptions: () => ({
      headerTitleStyle: {
        fontWeight: 'normal',
      },
    }),
  }
);

这可行,因为我现在没有看到后退按钮,但在登录后我看到一个奇怪的向后滑动动画,我看到主屏幕,然后重定向到用户界面

我做错了什么?

1 个答案:

答案 0 :(得分:1)

你可以做一个正常的导航并禁用左侧标题(或者根据需要更改它)然后你可以gesturesEnabled: false所以在IOS它不会允许通过刷卡回来...这不是最好的方法这样做(它可能很容易成为最糟糕的方式,因为你的堆栈实际上没有重置,因此你的索引可能会搞乱)但我认为这是最快的工作

编辑:正如我现在看到的那样现在他们已经修复了这个奇怪的动画,所以使用正常的重置应该可以正常工作(2018年3月26日)

相关问题