###React Navigation的导入配置
官方文档: 链接地址
导入的脚本为:yarn add react-navigation
前置配置: yarnnpm install -g yarn react-native-cli
###StackNavigator使用记录
- 定义多个组件(记得导出)
- 创建并配置
StackNavigator
,使用createStackNavigator
- 跳转功能的调用
this.props.navigation.navigate('组件名称')
具体测试代码:
App.js
import React, {Component} from 'react'; import { StyleSheet, Text, Button, View } from 'react-native'; import { createStackNavigator } from 'react-navigation'; import HomeScreen from './pages/homePage'; import MineScreen from './pages/minePage';
/**
* 同一个JS中的组件Main
*/
class MainScreen extends React.Component{
render(){
return(
<View style={styles.container}>
<Text>这是MainScreen!</Text>
<Button
title='跳转到DetailScreen'
onPress={()=>{
this.props.navigation.navigate('Home') //点击事件定义-跳转到Home
}}
/>
</View>
);
}
}
/**
* 同一个JS中的组件Detail
*/
class DetailScreen extends React.Component{
render(){
return(
<View style={styles.container}>
<Text>这是DetailsScreen!</Text>
<Button
title='跳转到MainScreen'
onPress={()=>{
this.props.navigation.navigate('Main') //点击事件定义- 跳转到Main
}}
/>
</View>
);
}
}
const RootStack = createStackNavigator ( //配置导航
{
Main: {
screen:MainScreen
},
Home:{
screen:HomeScreen
},
Mine:{
screen:MineScreen
},
Detail:{
screen:DetailScreen
}
},
{
initialRouteName:'Main', //设置初始页面
}
);
const styles = StyleSheet.create({
container:{
flex:1,
backgroundColor:'#f3f3f6',
alignItems: 'center',
justifyContent:'center'
}
});
type Props = {};
export default class App extends Component<Props>{
render() {
return <RootStack />; //引用导航配置
}
}
HomePage.js(minePage.js相似)
import React, {Component} from 'react'; import { View, Text, Button, StyleSheet } from 'react-native'; /** * 不同JS文件的组件Home */ export default class HomeScreen extends React.Component{ render(){ return( <View style={styles.container}> <Text>这是HomeScreen!</Text> <Button title="返回到Main" onPress = {()=>{ this.props.navigation.push('Home') //打开新的Home组件 }} /> <Button title="返回上一页" onPress = {()=>{ this.props.navigation.goBack() //返回上一页 }} /> </View> ); } } const styles = StyleSheet.create({ container:{ flex:1, backgroundColor:'#f3f3f6', alignItems: 'center', justifyContent:'center' } });
####总结
- 通过
createStackNavigator
方法配置导航后,在app.js的render()中直接引用。配置中的组件就可以使用this.props.navigation
进行跳转 this.props.navigation.navigate('Home')
,’Home’对应createStackNavigator
中的key.navigate('Home')
会先查找堆栈中是否存在’Home’界面,存在直接返回’Home’界面(旧的),不存在则开启新界面- 一直开启新界面可以使用
push('Home')
this.props.navigation.goBack()
:返回上一页,与Android的返回按键关联
####技巧:
返回首页功能的两种实现方式:
this.props.navigation.navigate('首页对应的key')
this.props.navigation.popToTop()
参数传递:
this.props.navigation.navigate('首页对应的key',{key:value,key2:value2})
this.props.navigation.push('首页对应的key',{key:value,key2:value2})
参数接收:
const { navigation } = this.props;
const value = navigation.getParam('key', 'defValue');
END
–Nowy
–2018.10.30