React Navigation 入门(二) - StackNavigator 的使用与传递参
在上一篇文章《StackNavigator 快速入门》中,介绍了 StackNavigator 的快速使用方法,本篇在其基础上进行补充,对 StackNavigator 进行更加详细的介绍。 StackNavigator 的介绍我们依然是先写个首页用来展示: export default class HomeScreen extends Component {
static navigationOptions = {
title: 'Welcome'
}
render() {
return <Text>Hello,Chat App!</Text>;
}
}
然后通过 StackNavigator 进行注册: const RootNavigator = StackNavigator({ Home: { screen: HomeScreen,} });
可以发现,这里设置 title 的方式和上一篇不一样了。上一篇中,我们在对 HomeScreen 进行注册的时候进行了 const RootNavigator = StackNavigator({
Home: {
screen: HomeScreen,navigationOptions: {
headerTitle: 'Home'
}
});
而在这篇文章中,我们把 另外在这里 添加一个新的页面这个在上一篇文章也已经说过了,如果你看过上一篇文章,这里随便看看就好了。 我们新建一个 export default class ChatScreen extends Component {
static navigationOptions = {
title: 'Chat with Lucy',}
render() {
return (
<View>
<Text>Chat with Lucy</Text>
</View>
);
}
}
然后在 export default class HomeScreen extends Component {
static navigationOptions = {
title: 'Welcome'
};
render() {
const {navigate} = this.props.navigation;
return <View>
<Text>Hello,Chat App!</Text>
<Button
onPress={() => navigate('Chat')}
title="Chat with Lucy"
/>
</View>
}
}
当然了,最最重要的不要忘记了在 const RootNavigator = StackNavigator({ Home: {screen: HomeScreen},Chat: {screen: ChatScreen} });
现在,我们点击按钮就可以进行页面之间的切换了。 传递参数任何页面之间的切换都避免不了参数的传递。还记得 render() {
const {navigate} = this.props.navigation;
return <View>
<Text>Hello,Chat App!</Text>
<Button
onPress={() => navigate('Chat',{user: 'Lucy'})}
title="Chat with Lucy"
/>
</View>
}
这里我们给 export default class ChatScreen extends Component {
// Nav options can be defined as a function of the screen's props:
// Nav options 可以被定义成一个页面属性的函数(原谅我英语太差)
// 格式就像下面这样,你就可以取到 navigation 了
static navigationOptions = ({navigation}) => ({
title: `Chat with ${navigation.state.params.user}`,});
render() {
// The screen's current route is passed in to `props.navigation.state`:
// 屏幕当前的路由被传递给了 `props.navigation.state`
const {params} = this.props.navigation.state;
return (
<View>
<Text>Chat with {params.user}</Text>
</View>
);
}
}
你可以改一下 本文到此结束,下一篇打算详细写写 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |