一、使用环境
- Mac 电脑 系统10.14.2
- Xcode9.4
- react-native-cli版本 2.0.1
- react-native: 0.57.3
- webstorm
二、导航使用
虽然系统有Navigator可以用,但是0.44版本后就不在推荐使用,而是让我们使用第三方导航组件react-native-deprecated-custom-components
注意:从0.44版本开始,Navigator被从react native的核心组件库中剥离到了一个名为react-native-deprecated-custom-components的单独模块中,而且官方推荐使用React Navigation导航组件,这个已经默认为官方推荐了
所有本文介绍的也是react-native-deprecated-custom-components
1、既然是使用第三方组件,所以第一步就是安装组件
npm install react-native-deprecated-custom-components --save
2、在使用导航组件的地方导入组件
import {Navigator} from 'react-native-deprecated-custom-components'
3、配置导航组件主要使用三个属性
- initialRoute
- configureScene
- renderScene
3.1 initialRoute:我也不用贴出官方的英文,我直接说中文理解为用于初始化路由
initialRoute:其参数对象中的各个属性如下:
{
component: function, //加载的视图组件
title: string, //加载视图的标题
passPros: object, //传递的数据
backButtonIcon: Image.propTypes.source, // 后退按钮图标
backButtonTitle: string, //后退按钮标题
leftButtonIcon: Image.propTypes.soruce, // 左侧按钮图标
leftButtonTitle: string, //左侧按钮标题
onLeftButtonPress: function, //左侧按钮点击事件
rightButtonIcon: Image.propTypes.soruce, // 右侧按钮图标
rightButtonTitle: string, //右侧按钮标题
onRightButtonPress: function, //右侧按钮点击事件
}
- configureScene: configureScene(route, routeStack)这个函数是optional可选属性,用来处理场景的动画和手势。它会要求两个参数route和routestack,route如同renderScene中的route一样是将要处理的界面的路由,routestack则是界面跳转关系的集合, 配置场景跳转方向
(route, routeStack) => Navigator.SceneConfigs.FloatFromRight
设置跳转方向
* - Navigator.SceneConfigs.PushFromRight (default) 默认
* - Navigator.SceneConfigs.FloatFromRight
* - Navigator.SceneConfigs.FloatFromLeft
* - Navigator.SceneConfigs.FloatFromBottom
* - Navigator.SceneConfigs.FloatFromBottomAndroid
* - Navigator.SceneConfigs.FadeAndroid
* - Navigator.SceneConfigs.SwipeFromLeft
* - Navigator.SceneConfigs.HorizontalSwipeJump
* - Navigator.SceneConfigs.HorizontalSwipeJumpFromRight
* - Navigator.SceneConfigs.HorizontalSwipeJumpFromLeft
* - Navigator.SceneConfigs.VerticalUpSwipeJump
* - Navigator.SceneConfigs.VerticalDownSwipeJump
3.renderScene:渲染参数renderScene(route, navigator),设置导航条跳转参数
本文使用代码
render() {
return (
{
return ({
...Navigator.SceneConfigs.PushFromRight,
gestures: null,
});
}
}
//导航条跳转传递参数
renderScene={
(route, navigator) => {
let Component = route.component;
// 没有参数
// return
// 有参数
return
}
}>
);
}
4、使用导航实现功能
主页点击--->详情(主页送一只玫瑰花给详情)玫瑰花是正向传值的参数==========正向传值
详情点击--->主页(详情送一盒巧克力给主页),巧克力是逆向传值的参数=========逆向传值
A、主页代码
export default class Home extends Component{
// 初始化方法
constructor(props){
super(props);
this.state = {
currentMessage: '原始值' //定义属性
}
}
gotoHomeDetail(){
// 这里保存一下是为了防止后续事件操作的时候this的执行改变
let _this = this;
// 使用push 方法跳转,里面是参数
this.props.navigator.push({
component: HomeDetail,
params: {
name: '主页送的一支玫瑰花', //正向传值参数
onCallBack: function (message) { //逆传值接受函数
_this.setState({currentMessage: message});
}
}
})
}
render(){
return (
我是主页
{
// 点击调用导航跳转
this.gotoHomeDetail();
}}
>点击送详情一枝花
回调:{this.state.currentMessage}
)
}
}
B 、详情代码
export default class HomeDetail extends Component{
// 初始化方法
constructor(props){
super(props);
}
//跳转返回页面
gotoPopHomePage= () =>{
// 获取导航
const {navigator} = this.props;
// 逆传参数
this.props.onCallBack('详情送的巧克力');
// 调用pop 返回
if(navigator){
navigator.pop();
}
}
render(){
return (
我是详情
我收到主页传值:{this.props.name}
回调主页巧克力
)
}
}
效果图
其他资料
ReactNative从零开始笔记1-初始化项目
ReactNative从零开始笔记2-组件的生命周期
ReactNative从零开始笔记3-state(状态)与props(属性)
ReactNative从零开始笔记4-PropTypes使用
ReactNative从零开始笔记5-组件传值(父子组件/兄弟组件)
ReactNative从零开始笔记6-导航页面传值(正传和逆传)