屏幕间切换参数传递
现在我们已经知道了如何创建一个带有一些路由屏幕的StackNavigator,并且能够在屏幕间切换,现在我们来看看导航时如何传递参数。
这件事可分为两部分 :
- 将参数放到一个对象里,作为
navigation.navigate
的第二个参数传递给目标路由 :this.props.navigation.navigate('RouteName', { /* 参数放到这里 */ })
- 在目标屏幕组件中读取参数:
this.props.navigation.state.params
。还有一些其他方法,假如你想直接访问参数(比如通过this.props.itemId
这种方式),你可以使用一个社区开发的包react-navigation-props-mapper
。
class HomeScreen extends React.Component {
render() {
return (
<View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
<Text>Home Screen</Text>
<Button
title="Go to Details"
onPress={() => {
/* 1. 跳到路由 Details 屏幕,传递了参数 */
this.props.navigation.navigate('Details', {
itemId: 86,
otherParam: 'anything you want here',
});
}}
/>
</View>
);
}
}
class DetailsScreen extends React.Component {
render() {
/* 2. 从导航状态中获取传递的参数 */
const { params } = this.props.navigation.state;
const itemId = params ? params.itemId : null;
const otherParam = params ? params.otherParam : null;
return (
<View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
<Text>Details Screen</Text>
<Text>itemId: {JSON.stringify(itemId)}</Text>
<Text>otherParam: {JSON.stringify(otherParam)}</Text>
<Button
title="Go to Details... again"
onPress={() => this.props.navigation.navigate('Details')}
/>
<Button
title="Go back"
onPress={() => this.props.navigation.goBack()}
/>
</View>
);
}
}
总结
navigate
函数的第二个参数是可选的,这个参数是传给目标路由的参数。比如:this.props.navigation.navigate('RouteName', {paramName: 'value'})
向StackNavigator
压入新的路由并且传递参数{paramName: 'value'}
。- 参数读取方法:
this.props.navigation.state.params
。如果没有传递任何参数,他会是null
. - 目前为止所有的代码
该系列文章目录
React Navigation 基础 8 : 术语词汇表
React Navigation 基础 7 : 全屏模态
React Navigation 基础 6 : 头部按钮
React Navigation 基础 5 : 配置导航头部
React Navigation 基础 4 : 屏幕间切换参数传递
React Navigation 基础 3 : 屏幕间切换
React Navigation 基础 2 : Hello React Navigation
React Navigation 基础 1: 开始使用