看到好多人在做導航的時候访锻,都是一個組件里面放一個navigation褪尝,這樣感覺好繁瑣,于是自己總結了一套期犬,只需要在RN界面入口的地方用一次河哑,然后,里面的子組件龟虎,都不需要在用導航組件來實現(xiàn)導航了璃谨。
不多BB,直接上代碼:
import React, {Component} from "react";
import {Navigator, AsyncStorage} from "react-native";
import Reading from "../tiantian/container/read/reading";
export default class YunTianZhiHui extends Component {
constructor(props) {
super(props);
global.orgGid = this.props.orgGid;//參數(shù)做全局保存
global.passportGid = this.props.passportGid;//
}
render() {
let defaultName = 'Reading';
let defaultComponent = Reading;
return (
<Navigator
initialRoute={{ name: defaultName, component: defaultComponent,params:{orgGid:this.props.orgGid,passportGid:this.props.passportGid}}}
configureScene={(route,routeStack) => {
return Navigator.SceneConfigs.FloatFromRight;
}}
interactivePopGestureEnabled={false}
renderScene={(route, navigator) => {
let Component = route.component;
return <Component {...route.params} navigator={navigator} />
}}/>
);
}
}
就是這樣,Reading為根組件鲤妥。YunTianZhiHui 為入口文件佳吞。在入口給根組件設置一個導航,那么根組件和根組件的子組件棉安,都具有導航navigator了底扳,就可以用它來實現(xiàn)導航了。這里的組件贡耽,指的是每一個視圖組件花盐。
下面看一看reading中怎么用navigator:
import React, {Component} from 'react';
import {
...
Navigator,
...
} from 'react-native';
export default class Reading extends Component {
//跳轉(zhuǎn)到搜索頁面
navigatorToSearch = () => {
this.props.navigator.push({
component: Search,//下一個視圖組件名稱
params: {//傳遞相關的參數(shù)
orgGid: this.props.orgGid,
passportGid: this.props.passportGid,
}
})
}
//返回上一個頁面
navigatorToBack = () => {
const {navigator} = this.props;
if (navigator && navigator.getCurrentRoutes().length > 1) {
navigator.pop();
}
}
}
沒錯 this.props.navigator,這直接拿來使用菇爪,在下一個Search頁面也可以直接拿來使用算芯,因為在入口文件YunTianZhiHui這個類中的
<Component {...route.params} navigator={navigator} />,已經(jīng)為子類(姑且就叫子類吧凳宙,一時不知道叫什么名字)頁面的每一個頁面指定了屬性navigator熙揍。