将道具传递给儿童时的反应导航重置

时间:2018-02-19 15:00:32

标签: reactjs react-native react-navigation

我将React-NavigationReact-Native一起使用。对于在堆栈的不同点执行的相同代码,我得到不同的结果。我的路由器混合使用Stack NavigatorsTab Navigators.以下结构:

  • StackNav:

    • 登录

    • 注册

    • 主页

      • TabsNav:
        • Tab One
        • Tab Two

登录是用户看到的第一个屏幕。从这里,他们可以登录并转到 Home => Tab One 或者他们可以注册。来自注册然后他们可以转到主页=>标签一

登录注册屏幕上,我在导航到 Home =>之前进行了API调用。标签一

当我导航时,我想重置堆栈并将同一props传递给制表符一制表符二

以下是登录

中的导航代码
    const actions = [
      NavigationActions.reset({
        index: 0,
        actions: [
          NavigationActions.navigate({
            routeName: "Home"
          })
        ]
      }),
      NavigationActions.setParams({
        key: 'Tab Two',
        params: {data: responseJson.data}
      }),
      NavigationActions.navigate({
        routeName: 'Tab One',
        params: {data: responseJson.data}
      })
    ];
    actions.forEach(this.props.navigation.dispatch);

标签一中,参数不会传递给this.props.navigation.state。在狩猎之后,我发现我可以通过转到this.props.navigation.dispatch.arguments

来访问参数

标签二中,参数传递给this.props.navigation.state

以下是注册的导航代码(它与登录相同):

    const actions = [
      NavigationActions.reset({
        index: 0,
        actions: [
          NavigationActions.navigate({
            routeName: "Home"
          })
        ]
      }),
      NavigationActions.setParams({
        key: 'Tab Two',
        params: {data: responseJson.data}
      }),
      NavigationActions.navigate({
        routeName: 'Tab One',
        params: {data: responseJson.data}
      })
    ];
    actions.forEach(this.props.navigation.dispatch);

现在,在标签一中,可以在this.props.navigation.state中找到参数。在 Tab Two 中,params根本没有通过。它们既没有出现在this.props.navigation.state中(我只得到routeNamekey)或this.props.navigation.dispatch.arguments(这显示为空)

我希望能够从this.props.navigation.state访问我的数据/道具。我的代码在两个地方是相同的,但我的结果不同。不确定发生了什么。我错过了什么或者这是一个错误吗?

PS:我需要重置堆栈。如果我只是以正常方式导航,一切正常。

2 个答案:

答案 0 :(得分:0)

这是一个已知的React-navigation错误,您可以跟踪此问题并尝试解决此github问题:https://github.com/react-navigation/react-navigation/issues/143

似乎版本1.0.0-beta.21有效,你可以尝试一下。

重置堆栈时,您还可以尝试使用init操作而不是navigate

答案 1 :(得分:0)

更新到最新版本1.1.1解决了我的问题。