ReactNative页面跳转

1,045 阅读1分钟

使用Navigation实现界面导航与跳转

首先安装导航库

npm install --save react-navigation

如果提示如下信息

npm WARN enoent ENOENT: no such file or directory, open '***\nodejs \package.json' npm

则进入到node_modules目录下进行安装

在index.js 中配置应用的首页

AppRegistry.registerComponent(appName, () => App);

//App是首页js的名字,首页是用来进行初始化配置的,如配置Navigator导航等

App首页配置Navigator

export default class App extends React.Component{
    //构造,初始化值可以写在这里
	constructor(props) {
        super(props);
        this.state={};
    }

	render(){
		let defaultName='HomePage';
		let defaultComponent=HomePage;
        return(
			<Navigator
			    //配置初始页及第一个页面
                initialRoute={{name:defaultName,component:defaultComponent}}
                
                //页面加载的动画
                configureScene={
					(route)=>{
						return  Navigator.SceneConfigs.VerticalDownSwipeJump;
					}
				}
                
                //配置导航的props属性navigator,其它页面也可以直接通过this.props.navitagor获取navigator
                renderScene={
					(route,navigator)=>{
						let Component=route.component
						return <Component {...route.param} navigator={navigator}/>
					}
				}
			/>
		);
	}
}

页面间跳转

HomePage页面

export default class HomePage extends Component<Props> {

    constructor(props) {
        super(props);
        this.state = {};
    }

    //点击跳转,方法名定义:方法名(){}
    _onPress() {
        const {navigator} = this.props;
        if (navigator) {
            navigator.push({
                name:"Second",
                component:Second,
            })
        }
    }

    render() {
        return (
            <View style={styles.container}>
                <Button style={styles.welcome} title="Welcome to React Native" onPress={this._onPress.bind(this)}/>
            </View>
        );
    }
}

const styles = StyleSheet.create({
    container: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        backgroundColor: '#F5FCFF',
    },
    welcome: {
        fontSize: 20,
        textAlign: 'center',
        margin: 10,
    },
});

Second页面

export default class Second extends Component {

    // 构造
    constructor(props) {
        super(props);
        // 初始状态
        this.state = {};
    }

    _onBack(){
        const {navigator}=this.props;
        if(navigator){
            navigator.pop();
        }
    }

    render() {
        return (
            <View style={styles.container}>
                <Button style={styles.container} onPress={this._onBack.bind(this)} title="Chat界面,点击返回"/>
            </View>
        )
    }
}

const styles = StyleSheet.create({
    container: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        backgroundColor: '#F5FCFF',
    },
    welcome: {
        fontSize: 20,
        textAlign: 'center',
        margin: 10,
    },
})