来看看我们的HomeScreen.js页面,当我们点击卡片的时候,我们想要把card的参数传到sectionScreen中,于是:

 <TouchableOpacity
    key={index}
    onPress={()=>{
         this.props.navigation.push('Section',{section:card})
        }}
       >
     <Card
      image={card.image}
      title={card.title}
      caption={card.caption}
      subtitle={card.subtitle}
      logo={card.logo}
       />
 </TouchableOpacity>

1. 应用中的每个页面组件都会自动提供 this.props.navigation

this.props.navigation可以获取的一些方法:

  • navigate - 转到另一个页面, 计算出需要执行的操作  (常用)
  • goBack - 关闭活动屏幕并在堆栈中向后移动  (常用)
  • addListener - 订阅导航生命周期的更新
  • isFocused - 函数返回 true 如果屏幕焦点和 false 否则。
  • state - 当前状态/路由  (常用)
  • setParams - 对路由的参数进行更改  (常用)
  • getParam - 获取具有回退的特定参数  (常用)
  • dispatch - 向路由发送 action  (常用)
  • dangerouslyGetParent - 返回父级 navigator 的函数

this.props.navigation并不是在所有页面(组件)中都可以使用,而是必须在StackNavigator、DrawerNavigator中声明的screen组件,才可以使用this.props.navigation。

2. 如果是StackNavigator,除了以上方法,this.props.navigation还提供如下的一些方法:

  • push - 推一个新的路由到堆栈  (常用)
  • pop - 返回堆栈中的上一个页面  (常用)
  • popToTop - 跳转到堆栈中最顶层的页面  (常用)
  • replace - 用新路由替换当前路由
  • reset- 操作会擦除整个导航状态,并将其替换为多个操作的结果。  (常用)
  • dismiss - 关闭当前堆栈

3. 如果是DrawerNavigator,除了以上方法,this.props.navigation还提供如下的一些方法:

  • openDrawer - 打开
  • closeDrawer - 关闭
  • toggleDrawer - 切换,如果是打开则关闭,反之亦然

 this.props.navigation.push('Section',{section:card})

功能:导航到某个路由 (即跳转页面)

使用:this.props.navigation.push(routeName, params, action)

参数:

  • routeName(必需)表示需要导航到的目标路由(即跳转的目标页面),是在StackNavigator 中声明的screen页面的名称
  • params(可选)表示跳转携带的参数,可以使用大括号携带多个,形式是key-value形式,在目标页面使用this.props.navigation.state.params.xxx或者this.props.navigation.getParam('xxx')来获取使用
  • action(可选)不常用,此处不做解释

Push - 在堆栈顶部添加一条路由,并导航至该路由. 与navigate的区别在于,如果有已经加载的页面,navigate方法将跳转到已经加载的页面,而不会重新创建一个新的页面。 push 总是会创建一个新的页面,所以一个页面可以被多次创建。

所以我们可以将参数封装成一个对象,然后将这个对象作为navigation.push()方法的第二个参数,从而实现跳转的时候传递参数过去,接着在sectionScreen.js页面中使用getParams('xxx')方法读取传递过来的参数。

const {navigation} = this.props;
const section = navigation.getParam('section');

引用:https://www.cnblogs.com/nangezi/p/10708282.html

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐