React Navigation Reset 可以加参数吗?

Posted

技术标签:

【中文标题】React Navigation Reset 可以加参数吗?【英文标题】:React Navigation Reset Can add parameters? 【发布时间】:2017-11-10 22:53:55 【问题描述】:

我仍然是反应导航的新手。 我希望在登录成功后重置路线信息。但是有一些参数,比如我希望传递给主页的登录信息。

import  NavigationActions  from 'react-navigation'

const resetAction = NavigationActions.reset(
  index: 0,
  actions: [
        NavigationActions.navigate( routeName: 'Profile',
                params:user:this.state.username)
      ]
  )
    this.props.navigation.dispatch(resetAction)

在个人资料页面中,我想访问参数,所以我使用这个:

constructor(props)
super(props)
this.state =  username: this.props.navigation.state.params.user, 
  

但我收到:undefined is not an object (evaluate '_this.props.navigation.state.params.user') 在控制台日志中。 我可以知道我应该如何获取参数吗?谢谢

【问题讨论】:

【参考方案1】:

您可以像这样在 react-native stack navigator 的重置操作中传递参数:-

const resetAction = NavigationActions.reset(
            index: 0,
            actions: [ 
                NavigationActions.navigate( 
                    routeName: 'ScreenName',      // name of the screen you want to navigate
                    params: 
                        paramsKey: paramsValue   // this second parameter is for sending the params
                     
                )
            ],
);
this.props.navigation.dispatch(resetAction);

并从导航状态参数中获取第二屏中的参数值,如下所示:-

static navigationOptions = (navigation, screenProps) => 
    const params = navigation.state.params || ;   // You can get the params here as navigation.state.params.paramsKey

    console.log("CompareScreen product_id:", params.paramsKey);

【讨论】:

【参考方案2】:

是的,它可以。 React Navigation 5+ 让我们轻松使用 navigation 属性重置路由历史,然后它允许我们将 params 属性传递给目标路由对象。

navigation.reset(
    index: 0,
    routes: [name: 'DriveInfosAdded', params: data],
  );

【讨论】:

【参考方案3】:

这在 React Navigation 5 上对我有用:

要重置导航状态,请导航到屏幕“OrderDetails”并将参数“orderCode”传递到此屏幕:

navigation.reset(index: 0, routes: [ name: 'OrderDetails', params:  orderCode: 'whatever'  ] )

在新路由'OrderDetails'中检索参数orderCode:

function OrderDetails(theme, route, navigation) 
const  orderCode  = route.params;
...

【讨论】:

【参考方案4】:

您正在使用username 作为键来传递参数。 因此,当您检索它时,您的代码应如下所示

第 1 步:传递参数

this.props.navigation.navigate('Your-Screen_name', username: 'Lucy' )

第二步:获取参数

this.state =  
    username: this.props.navigation.state.params.username, 

【讨论】:

您好,我已经按照您所说的进行了编辑,但仍然收到相同的错误消息 你用的是redux结构吗? 您好,我认为不,我遵循的指南来自:reactnavigation.org/docs/navigators/navigation-actions。 Redux 在高级指南中,我对此并不熟悉。 嗨,我已经编辑了代码。但是,我仍然收到此消息:未定义不是控制台日志中的对象(评估 '_this.props.navigation.state.params.username')【参考方案5】:

这对我有用:

    传递参数:

NavigationActions.navigate( routeName: 'Location', params: username: 'Luchi' ),

    获取它们:

const params = this.props.navigation.state.params || ; if (!(params && params.username)) alert('hi '+params.username)

【讨论】:

以上是关于React Navigation Reset 可以加参数吗?的主要内容,如果未能解决你的问题,请参考以下文章

React Native - navigation.navigate 不工作

在 react-hook-form 的 useFieldArray 上异步调用 reset 时,reset 无法正常工作

如何重置嵌套的堆栈导航导航器 react-navigation v5

react-navigation 跟 原生的 navigator 可以同时存在吗

react-native填坑--react-navigation

是否可以使用 react-navigation (v5) 以 UIModalPresentationPageSheet 或 UIModalPresentationFormSheet 样式呈现模式?