如何在React-Native中导航?

vvppvyoh  于 2023-01-21  发布在  React
关注(0)|答案(4)|浏览(161)

我在我的react-native项目中使用ReactNavigation库,6个小时以来,我一直在尝试从一个屏幕导航到其他屏幕,并尝试了所有可能的方法,但我认为我无法正确获得逻辑。这是我的项目结构。
Here
我现在的做法。

const AppStack = StackNavigator({ Main: Feeds });
const AuthStack = StackNavigator({ Launch: LaunchScreen, });

export default SwitchNavigator({
  Auth: AuthStack,
  App: AppStack
});

在我的启动屏幕. js中

const SimpleTabs = TabNavigator(
  {
    Login: {
      screen: Login,
      path: ""
    },
    SignUp: {
      screen: SignUp,
      path: "doctor"
    }
  },
);

<SimpleTabs screenProps={{rootNavigation : this.props.navigation  }}/>

但问题是,在我的LaunchScreen组件中,有一个TabNavigator,其中包含我的另外两个组件Login.js和SignUp.js,但Login.js中的按钮无法将其导航到Feed.js。
单击按钮时,将执行此操作。

signInAsync = async () => {
    await AsyncStorage.setItem('userToken', 'abc');
    this.props.navigation.navigate('Main');
    console.log("AAAAAsSSS");
  };

我的LaunchScreen.js包含一个TabNavigation,它允许您在两个组件(即Login.jsSignUp.js)之间滑动。
现在,当您单击Login.js组件中的Login按钮时,它将对用户进行身份验证,并将切换整个LauchScreen.js组件与Feed.js组件。
我是一个React迟钝的人。

nwsw7zdq

nwsw7zdq1#

您可以使用react-native-router-flux(npm install --save react-native-router-flux)
只需创建一个Navigator.js文件并定义要导航的每个页面。

import React from 'react';
import { Router, Scene } from 'react-native-router-flux';

import LaunchScreen from '../components/LaunchScreen.js';
import Feed from '../components/Feed.js';

const Navigator = () => {
  return (
    <Router>
      <Scene key="root">
        <Scene key="lauchscreen" component={LaunchScreen} hideNavBar initial /> 
        <Scene key="feedscreen" type="reset" hideNavBar component={Feed} />
      </Scene>
    </Router>
  );
};

export default Navigator;

现在在App.js文件中添加以下内容:

import Navigator from './src/Navigator.js';

export default class App extends Component<Props> {
render() {
    return (
          <Navigator />
    );
  }
}

现在在你的login.js当你点击登录按钮写这个:

import { Actions } from 'react-native-router-flux';

  onLoginClick() {
    Actions.feedscreen();
  }

就是这样...快乐编码。

slsn1g29

slsn1g292#

如果要导航到Feeds.js,请使用this.props.navigation.navigate('App');进行导航
不作为
this.props.navigation.navigate('Main');
因为你的

export default SwitchNavigator({
  Auth: AuthStack,
  App: AppStack // here is your stack of Main
});

参考example

4zcjmb1e

4zcjmb1e3#

几个月前我遇到了同样的问题,感谢上帝,你只花了6个小时,我几乎花了4天的时间来寻找解决方案。
谈到这个问题,请注意,在React导航中,您可以导航到兄弟类或子类。
所以在这里,你有一个swtichNavigator,其中包含2个堆栈导航器(如堆栈1和堆栈2),堆栈1有饲料和堆栈2有一个标签导航器登录和注册.
现在你想从login.js导航到feeds.js(假设文件名是feeds.js),正如已经提到的,你不能导航回父节点或祖节点,那么如何解决这个问题呢?
在react native中,你有权限将params(screenprops)从父节点传递给子节点。使用这个权限,你需要将launchScreen的this.props.navigation存储到一个变量中,并将其传递给tab/login(检查树结构)。现在在login.js中使用这个变量来导航。
您只是将导航权限从父级传递给子级。
在此编辑:

<InnerTab screenProps={{rootNavigation : this.props.navigation  }} />

在这里,InnerTab是选项卡导航器。

export const InnerTab = TabNavigator({
login: {
    screen: login,
    },
},
signup: {
    screen: signup,
    },
},

},
在login类中,使用const { navigate } = this.props.screenProps.rootNavigation;现在可以使用变量navigate
我知道这有点难以理解,但我已经试过了,它起作用了。

vuktfyat

vuktfyat4#

按如下所示编写Navigator.js文件,

import React from 'react'
import { NavigationContainer, useNavigation } from '@react-navigation/native'
import { createStackNavigator } from '@react-navigation/stack'

const SwitchNavigatorStack = () => {

  return (
    <NavigationContainer>
        <Stack.Navigator initialRouteName='{nameofscreen}' screenOptions={screenOptions}>
            <Stack.Screen name='{nameofscreen}' component={{nameofscreen}}/>
            <Stack.Screen name='{nameofscreen}' component={{nameofscreen}}/>
            <Stack.Screen name='{nameofscreen}' component={{nameofscreen}}/>
            <Stack.Screen name='{nameofscreen}' component={{nameofscreen}}/>
        </Stack.Navigator>
    </NavigationContainer>
  )
}

export default SwitchNavigatorStack

一旦完成了将App.js文件更改为,

import SignedInStack from './navigation'
import React from 'react'

export default function App() {
  return <SwitchNavigatorStack/>
}

在这之后,你就完成了对你的项目的导航设置。在所有你想添加导航特性的组件中,确保你使用了navigation.navigate()(或)navigation.push()方法。同时确保你通过导入useNavigation库来挂钩navigation常量。例如,

const Login = () => {
   const navigation = useNavigation()
   < Button title = 'Login' onPress={() => navigation.navigate('{nameofscreen}')} />
}

有了这个代码片段,你可以使用@react-navigation/native@react-navigation/stack实现屏幕之间的导航

相关问题