React Native的原生路由

新项目移动端要用React-native搭建,于是又开启了新一波学习之旅

文档里查到的Navigator例子均为使用Navigator作为某个组件render方法的唯一返回值,这在某些情况下有些不符合人类思维(或者说是我的思维...),例如:
微信,典型的上中下布局,进入消息/朋友/朋友圈分别指向三个页面,他们在互相切换时主要是页面中间部分发生改变,上部只是改变了几个文字,下部只是当前tab页的图标变为高亮


在这种需求下
一、我理想的实现方式为:

<View>
<Header />
<Navigator />
<Footer />
</View>


在Navigator的renderScene里根据路由改变当前组件的state,从而让Header和Footer根据state渲染出不同的内容或样式

try了一下不太行, 展示出的只有Header而已,似乎不作为组件唯一返回值的Navigator根本不会显示
想去找一下这个组件的 renderScene函数实现 功力不够,没找到...

 

锲而不舍地重试了一下后,解决了 思路为:


    0.react以及rn有着很完备的错误检测以及报错信息,既然没报错,猜想用法没问题
    1.在由Navigator渲染的组件Login的render方法里加了个alert,发现弹出了,说Navigator的功能正常,更加重了我的怀疑
    2.给包裹Navigator的view层加了背景色,发现它不是全屏的,猜想可能navi是异步渲染的,导致父组件没有撑开
    3.改变view的高度,发现露出了Login组件!!可以了!!之前没显示果然是因为container没撑开,把它挡住了

二、在(一)还没有搞定的时候,我退而求其次,采用路由提前声明的方式? 

   可以使用Navigator的initialRouteStack属性来初始化路由栈
   Navigator的renderscene函数可以返回另一个Navigator,通过这种依次嵌套的方式像react-router一样提前声明好整个用用的路由

 

三、navigationBar的使用?
    1.使用原生的<Navigator.NavigationBar> 该组件有一个routeMapper属性,该属性的值需要对象类型
该对象(可)包含三个固定的属性,均为函数,返回值为组件

LeftButton(route, navigator, index, navState) {
//return Component
}
Title(route, navigator, index, navState) {
//return Component
}
RightButton(route, navigator, index, navState) {
//return Component
}


注:<Navigator.NavigationBar>的源码位置在

node_modules\react-native\Libraries\CustomComponents\Navigator

 

   2.上面的方法有一定的局限性,比如有4个按钮就没办法了,我猜想应该是可以使用自定义对象的! 持续更新!

 

该探路项目的地址为https://github.com/youmuFE/reactNativeDemo 欢迎交流

转载于:https://www.cnblogs.com/iny7/p/5515577.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React Native 中的路由可以使用以下几个库来实现: 1. React Navigation:React Navigation 是 React Native 中最流行的路由库之一,它提供了多种路由类型和导航器,例如 Stack Navigator(堆栈导航)、Tab Navigator(标签导航)和 Drawer Navigator(抽屉导航)等。 2. React Native Navigation:React Native Navigation 是一个由 Wix 开发的路由库,它提供了原生级别的性能和体验。它支持多个平台,并且提供了多种导航器及其配置选项。 3. React Native Router Flux:React Native Router Flux 是一个基于 React Navigation 的路由库,它提供了类似于 React Router 的 API,使用起来比较方便。 下面是一个使用 React Navigation 的示例: 首先安装 React Navigation: ``` npm install @react-navigation/native ``` 然后安装 Stack Navigator: ``` npm install @react-navigation/stack ``` 在 App.js 中配置 Stack Navigator: ```javascript import { NavigationContainer } from '@react-navigation/native'; import { createStackNavigator } from '@react-navigation/stack'; import HomeScreen from './screens/HomeScreen'; import DetailScreen from './screens/DetailScreen'; const Stack = createStackNavigator(); function App() { return ( <NavigationContainer> <Stack.Navigator> <Stack.Screen name="Home" component={HomeScreen} /> <Stack.Screen name="Detail" component={DetailScreen} /> </Stack.Navigator> </NavigationContainer> ); } export default App; ``` 在 HomeScreen.js 中实现页面跳转: ```javascript import React from 'react'; import { Button } from 'react-native'; import { useNavigation } from '@react-navigation/native'; function HomeScreen() { const navigation = useNavigation(); return ( <Button title="Go to detail screen" onPress={() => { navigation.navigate('Detail'); }} /> ); } export default HomeScreen; ``` 在 DetailScreen.js 中实现返回: ```javascript import React from 'react'; import { Button } from 'react-native'; import { useNavigation } from '@react-navigation/native'; function DetailScreen() { const navigation = useNavigation(); return ( <Button title="Go back" onPress={() => { navigation.goBack(); }} /> ); } export default DetailScreen; ``` 这样就完成了一个简单的路由示例,点击 HomeScreen 上的按钮可以跳转到 DetailScreen,DetailScreen 上的按钮可以返回 HomeScreen。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值