【REACT NATIVE 系列教程之五】NAVIGATOR(页面导航)的基本使用与传参

简介:

今天介绍一种应用开发中常用的负责页面切换及导航功能的组件:Navigator

一:Navigator

对于页面导航其实主要功能就是:每个页面都知道本身应该切换到哪个页面,并且切到的页面会记录从哪里来,如果要返回的话,知道返回到哪个页面。这一切都不需要再用逻辑管理!而且每个页面之间也可以进行参数传递,很方便的组件。废话不多说:先上示例代码:

首先我们导入 Navigator 组件:

1
2
3
4
5
import React, {
    ...
    Navigator,
    ...
} from  'react-native' ;

使用方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
render() {
     return  (
         <Navigator
             initialRoute={{ name:  'FirstPage' , component: FirstPage }}
             configureScene={(route) => {
                return  Navigator.SceneConfigs.HorizontalSwipeJump;
             }}
             renderScene={(route, navigator) => {
             let Component = route.component;
             return  <Component {...route.params} navigator={navigator}/>
             }} 
           />
   )}


上面的代码,初始化了导航组件,且设置默认显示页面为 FirstPage,这里需要注意两点:

1. 我们主要关注 Navigator 里  initialRoute 中的 两个参数:

name: 组件名

component: 组件Class名

Himi导入FirstPage时如下:

1
import FirstPage from  './FirstPage'

 所以 name 和  component 都填写的为FirstPage

2. <Component {…route.params} navigator={navigator} />

上面这一行是将navigator作为props进行传递

3.  Navigator.SceneConfigs.HorizontalSwipeJump

上面一行是设置页面切换之间的动画效果,更多效果查看源文件:

node_modules/react-native/Libraries/CustomComponents/Navigator/NavigatorSceneConfigs.js

下面我们看下FirstPage.js :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import React, {
   AppRegistry,
   Component,
   View,
   Text,
   StyleSheet,
   TouchableHighlight,
} from  'react-native' ;
import SecondPage from  './SecondPage' ;
class FirstPage extends React.Component {
     constructor(props) {
         super (props);
         this .state = { };
     }
   nextEvent(){
     const { navigator } =  this .props;
     if (navigator) {
       navigator.push({
           name:  'SecondPage' ,
           component: SecondPage, 
           params: {
             titleText: ''
           }
       })
     }
   }
   render() {
     return  (
         <View style={styles.himiViewStyle} >
             <Text style={styles.himiTextStyle}>Himi React Native 教程 </Text>
             <View style={styles.himiViewStyle}> 
             <TouchableHighlight 
               underlayColor= '#4169e1'
               onPress={ this .nextEvent.bind( this )}  
              
                 <Text style={styles.text} > 点击我进入[SecondPage]个页面 </Text>
             </TouchableHighlight>
             </View>
         </View>
   )} 
};
var  styles = StyleSheet.create({
   text: {
     color: '#f00' ,
     fontSize:20,
   },
   himiViewStyle:{
     flex: 1,
     flexDirection:  'column' ,
     justifyContent:  'center' ,
     alignItems:  'center' ,
     backgroundColor:  '#F5FCFF' ,
   },
   himiTextStyle:{
     color: '#f00' ,
     fontSize:30,
     marginTop:70,
   },
   
});
module.exports = FirstPage;

这里我们主要看 nextEvent 函数内容,

const { navigator } = this.props; 这一句是以props传递过来的navigator进行接收。

得到Navigator组件,可以利用其 push 与pop两个函数进行切换下一页面与回到上个页面操作。

下面代码段演示了如何切换到下一个页面:

1
2
3
4
5
6
7
8
9
if (navigator) {  //判断是否正常接收到传来的导航组件
     navigator.push({  //利用此函数进行切换到指定页面
         name:  'SecondPage' , //目标组件名
         component: SecondPage,  //目标组件Class名
         params: { 
           titleText: ''
         }
    })
}


还需要强调的是params,此参数是页面切换时传入下个页面的参数书写形式。

    获取时,直接 this.props.titleText 即可得到,简单、方便。

 下面代码段演示如何返回上个页面:

1
2
3
4
const { navigator } =  this .props; 
if (navigator) {
    navigator.pop();
}

返回上一页面就十分简单了,不多赘述了。

Himi这里为了演示效果,所以下面把 ThreePage.js也给出源码:(最后附上动态效果图)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import React, {
   AppRegistry,
   Component,
   View,
   Text,
   Alert,
   StyleSheet,
   TouchableHighlight,
} from  'react-native' ;
export  default  class threePage extends React.Component {
     constructor(props) {
         super (props);
         this .state = { };
     }
   backEvent(){
     const { navigator } =  this .props;
     if (navigator) {
         navigator.pop();
     }
   }
   
   render() {
     return  (
         <View style={styles.himiViewStyle} >
             <Text style={styles.himiTextStyle}> ThreePage </Text>
       
       <View style={styles.himiViewStyle}> 
         <TouchableHighlight 
           underlayColor= '#4169e1'
           onPress={ this .backEvent.bind( this )}  
          
             <Text style={styles.text} >  返回[SecondPage]页面 </Text>
         </TouchableHighlight>
       </View>
     </View>
   )} 
};
var  styles = StyleSheet.create({
   text: {
     color: '#f00' ,
     fontSize:20,
   },
   himiViewStyle:{
     flex: 1,
     flexDirection:  'column' ,
     justifyContent:  'center' ,
     alignItems:  'center' ,
     backgroundColor:  '#F5FCFF' ,
   },
   himiTextStyle:{
     color: '#f00' ,
     fontSize:30,
     marginTop:70,
   },
   
});


运行效果图:(点击查看动态效果)

user23

从上图效果可以看出,切换之间的页面可以直接通过手势滑动进行切换~:)





本文转自 xiaominghimi 51CTO博客,原文链接:http://blog.51cto.com/xiaominghimi/1782626,如需转载请自行联系原作者

目录
相关文章
|
前端开发 JavaScript
React项目路由懒加载lazy、Suspense,使第一次打开项目页面变快
本文介绍了在React项目中实现路由懒加载的方法,使用React提供的`lazy`和`Suspense`来优化项目首次加载的速度。通过将路由组件改为懒加载的方式,可以显著减少初始包的大小,从而加快首次加载速度。文章还展示了如何使用`Suspense`组件包裹`Switch`来实现懒加载过程中的fallback效果,并提供了使用前后的加载时间对比,说明了懒加载对性能的提升作用。
1138 2
React项目路由懒加载lazy、Suspense,使第一次打开项目页面变快
|
11月前
|
编解码 前端开发 JavaScript
js react antd 实现页面低分变率和高分变率下字体大小自适用,主要是配置antd
在React中结合Ant Design与媒体查询,通过less变量和响应式断点动态调整`@font-size-base`,实现多分辨率下字体自适应,提升跨设备体验。
553 2
|
前端开发 JavaScript 编译器
React编程新手入门实践教程
本书深入解析React核心思想与设计哲学,涵盖组件化思维、虚拟DOM原理及JSX本质,探讨函数组件与类组件特性,详解状态管理、生命周期控制及事件处理机制,帮助开发者掌握高效构建用户界面的技巧。
366 1
|
前端开发 JavaScript
除了使用Route组件,React Router还有其他方式处理404错误页面吗
除了使用Route组件,React Router还有其他方式处理404错误页面吗
643 58
|
前端开发
如何在React Router中定义404错误页面组件?
如何在React Router中定义404错误页面组件?
523 57
|
前端开发 UED
在React Router中,如何处理路由的404错误页面?
在React Router中,如何处理路由的404错误页面?
487 57
|
前端开发 JavaScript UED
react或者vue更改用户所属组,将页面所有数据进行替换(解决问题思路)____一个按钮使得页面所有接口重新请求
在React或Vue中,若需在更改用户所属组后更新页面所有数据但不刷新整个页面,可以通过改变路由出口的key值来实现。在用户切换组成功后,更新key值,这会触发React或Vue重新渲染路由出口下的所有组件,从而请求新的数据。这种方法避免了使用`window.location.reload()`导致的页面闪烁,提供了更流畅的用户体验。
333 1
react或者vue更改用户所属组,将页面所有数据进行替换(解决问题思路)____一个按钮使得页面所有接口重新请求
|
前端开发 JavaScript CDN
React 教程
10月更文挑战第6天
320 3
|
前端开发
React页面跳转取消上一个页面的所有请求
React页面跳转时取消上一个页面的所有axios请求,通过axios拦截器设置cancelToken,并在页面跳转时调用cancel函数取消未完成的请求。
514 2
|
前端开发 JavaScript
React配合axios请求拦截校验session,403跳转至登陆页面
React中使用axios进行请求拦截,通过自定义事件监听和响应拦截实现403状态码时的自动登录页面跳转。
746 2