react-native路由 页面跳转

Stack导航

一、下载react-navigation

npm install @react-navigation/native

二、下载插件

npm install react-native-screens react-native-safe-area-context

三、react-native-screens配置

1、在android/app/src/main/java/<your package name>/MainActivity.java加入以下代码

public class MainActivity extends ReactActivity {
  // ...
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(null);
  }
  // ...
}

2、在该文件引入其他文件后添加以下代码:

import android.os.Bundle;

四、在app.js或者index.js中引入,并使用NavigationContainer包裹

import * as React from 'react';
import { NavigationContainer } from '@react-navigation/native';


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

五、下载react-navigation/native-stack

npm install @react-navigation/native-stack
// In App.js in a new project

import * as React from 'react';
import { View, Text } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
import Login from './Login'

const Stack = createNativeStackNavigator();

function App() {
  return (
    <NavigationContainer>
      <Stack.Navigator>
        <Stack.Screen name="Login" component={Login} />
      </Stack.Navigator>
    </NavigationContainer>
  );
}

export default App;

六、在需要跳转的页面引入useNavigation

import { useNavigation } from '@react-navigation/native';
.......


export default function Login(){
    const navigation=useNavigation()
    return(
      <View>
         <Button title='去注册' onpress={()=>navigation.navigate('Login')}></Button>
       </View>
    )
}

七、跳转上一个页面navigation.goBack()

import { useNavigation } from '@react-navigation/native';

const navagation=useNavigation()

<TouchableOpacity
    onPress={()=>navigation.goBack()}
    >
    <Image
        source={require('../../assets/images/return.png')}
        style={[styles.backIcon]}
        />

八、跳转传参以及接收参数

1、传参

//pamars为传递参数
navigation.navigate('Scan',{data:pamars})

2、接收

import { useNavigation } from '@react-navigation/native';
.......

//接收的组件接收route参数
export default function Scan({route}){
    const navigation=useNavigation()
    //传递的参数  输出查看
    const parama=route.params
    return(
      <View>
         <Button title='去注册' onpress={()=>navigation.navigate('Login')}></Button>
       </View>
    )
}

具体详细可见官网 Moving between screens | React Navigation

 

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
React Native 中,可以使用第三方库来实现路由拦截。一个常用的库是 React Navigation,它提供了强大的导航和路由管理功能。 要实现路由拦截,可以使用 React Navigation 提供的导航守卫功能。导航守卫可以在路由变化前或后执行自定义的逻辑。 以下是一个简单的示例,演示如何在 React Native 中使用 React Navigation 实现路由拦截: 1. 首先,确保已经安装了 React Navigation: ``` npm install @react-navigation/native ``` 2. 安装所需的导航器(例如 Stack Navigator): ``` npm install @react-navigation/stack ``` 3. 创建一个名为 `NavigationService.js` 的新文件,用于导航拦截逻辑: ```javascript import { NavigationActions } from '@react-navigation/compat'; let navigator; function setTopLevelNavigator(navigatorRef) { navigator = navigatorRef; } function navigate(routeName, params) { navigator.dispatch( NavigationActions.navigate({ routeName, params, }) ); } // 添加其他需要的导航方法 export default { navigate, setTopLevelNavigator, }; ``` 4. 在根组件中设置导航器并引用 `NavigationService.js`: ```javascript import { NavigationContainer } from '@react-navigation/native'; import { createStackNavigator } from '@react-navigation/stack'; import NavigationService from './NavigationService'; const Stack = createStackNavigator(); function App() { return ( <NavigationContainer ref={navigatorRef => { NavigationService.setTopLevelNavigator(navigatorRef); }}> <Stack.Navigator> {/* 添加其他屏幕 */} </Stack.Navigator> </NavigationContainer> ); } export default App; ``` 5. 在需要拦截的组件中使用 `NavigationService.js`: ```javascript import NavigationService from './NavigationService'; // 在需要拦截的地方调用 `NavigationService.navigate` 方法 NavigationService.navigate('ScreenName'); ``` 通过这种方式,你可以在路由变化前后执行自定义的逻辑,例如验证用户权限、处理特定的跳转逻辑等。需要注意的是,这只是一个简单的示例,你可以根据具体的需求进行定制和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

y199710

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值