rn 路由传参、navigation传参

傷城~ 2021-07-24 16:57 1431阅读 0赞
  1. 路由传参:
  2. (1)传参数
  3. (1)发送
  4. 函数式传递
  5. function xx({navigation})
  6. {
  7. ...
  8. //发送
  9. {navigation.navigate('路由名',{键值对})}
  10. }
  11. 路由声明处传递
  12. <Stack.Screen name="xx" component={x} initialParams={
  13. {键值对}}/>
  14. (2)接收
  15. 1、函数式组件
  16. function xx({navigation,route})
  17. {
  18. ...
  19. //接收
  20. {JSON.stringify(route.params.键名)}
  21. }
  22. 2、类组件
  23. export default class xx extends Component{
  24. ...
  25. const {route} = this.props
  26. ...
  27. {JSON.stringify(route.params.键名)}
  28. }
  29. 其中:
  30. (1)接收参数最好使用JSON.stringify将参数序列化成字符串(官方推荐),能做到深度链接
  31. (2)可传参数{route.params?.键名}; 当参数存在时才显示,多用于下一个屏幕传递到上一个屏幕
  32. navigation传参:
  33. this.props.navigation.setParams({键值对});
  34. this.props.navigation.getParam('键名');

代码示例:

  1. import 'react-native-gesture-handler';
  2. import React,{ Component} from 'react'
  3. import { Text,View,StyleSheet,Button,ScrollView} from 'react-native'
  4. import { NavigationContainer } from '@react-navigation/native';
  5. import { createStackNavigator } from '@react-navigation/stack';
  6. import A from './App21'
  7. function Home({ navigation,route }){
  8. return (
  9. <View style={ { flex:1, alignItems: 'center', justifyContent: 'center' }}>
  10. <Text>Home Screen</Text>
  11. <Text>{ route.params?.address}</Text>
  12. <Button
  13. title="Go to Details"
  14. //导航,相当于go,相当页面不会放进栈里
  15. onPress={ () =>navigation.navigate('Details',{ name:'jeff',pass:'123'})}
  16. color='red'
  17. ></Button>
  18. <Button
  19. title="Go to A"
  20. //push会将路由放进堆栈里即使是相同页面
  21. onPress={ () => navigation.navigate('A',{ id:'2'})}
  22. />
  23. </View>
  24. );
  25. }
  26. function DetailsScreen({ navigation,route}) {
  27. return (
  28. <View style={ { flex:1,alignItems: 'center', justifyContent: 'center' }}>
  29. <Text>Details Screen</Text>
  30. <Text>{ JSON.stringify(route.params.name)}</Text>
  31. <Text>{ JSON.stringify(route.params.pass)}</Text>
  32. <Text>{ JSON.stringify(route.params.sex)}</Text>
  33. <Button
  34. title="Go to Details... again"
  35. //push会将路由放进堆栈里即使是相同页面
  36. onPress={ () => navigation.push('Details')}
  37. />
  38. <Button
  39. title="Go Back"
  40. //push会将路由放进堆栈里即使是相同页面
  41. onPress={ () => navigation.navigate('Home',{ address:'heart'})}
  42. />
  43. </View>
  44. );
  45. }
  46. function New({ navigation}) {
  47. return (
  48. <View style={ { flex: 1, alignItems: 'center', justifyContent: 'center' }}>
  49. <Text>New Screen</Text>
  50. </View>
  51. );
  52. }
  53. export default class App extends Component{
  54. render(){
  55. const Stack = createStackNavigator();
  56. return (
  57. <>
  58. <NavigationContainer>
  59. <Stack.Navigator initialRouteName="Home">
  60. <Stack.Screen name="Home" component={ Home} options={ { title: 'Overview' }}/>
  61. <Stack.Screen name="Details" component={ DetailsScreen} initialParams={ { sex:'female'}}/>
  62. <Stack.Screen name="New" component={ New} />
  63. <Stack.Screen name="A" component={ A} />
  64. </Stack.Navigator>
  65. </NavigationContainer>
  66. </>
  67. );
  68. }
  69. }

类组件:

  1. import React,{ Component} from 'react'
  2. import { View,Text,StyleSheet,Button} from 'react-native'
  3. import FontAwesome from 'react-native-vector-icons/dist/FontAwesome'
  4. export default class App extends Component{
  5. render(){
  6. const { navigation,route}=this.props
  7. return(
  8. <>
  9. <Text>哈哈哈</Text>
  10. <Text>{ route.params.id}</Text>
  11. <Button
  12. title='go details'
  13. onPress={ ()=>navigation.navigate('Details')}
  14. />
  15. </>
  16. )
  17. }
  18. }

发表评论

表情:
评论列表 (有 0 条评论,1431人围观)

还没有评论,来说两句吧...

相关阅读

    相关 VueRouter

    1. 前言 本小节我们介绍 VueRouter 路由组件传参。包括 params 传参、query 传参的两种方式。路由传参的知识点非常重要,在日常开发中,我们经常会通过

    相关 vue

    前言 之前,查了其他博客,总结一篇,发现貌似不对??,因此又查了一遍好不容易写了出来。 1.query传参 一种是,这样滴。 // 跳转 thi