我将React-Navigation
与React-Native
一起使用。对于在堆栈的不同点执行的相同代码,我得到不同的结果。我的路由器混合使用Stack Navigators
和Tab Navigators.
以下结构:
StackNav:
登录
注册
主页
登录是用户看到的第一个屏幕。从这里,他们可以登录并转到 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
中(我只得到routeName
和key
)或this.props.navigation.dispatch.arguments
(这显示为空)
我希望能够从this.props.navigation.state访问我的数据/道具。我的代码在两个地方是相同的,但我的结果不同。不确定发生了什么。我错过了什么或者这是一个错误吗?
PS:我需要重置堆栈。如果我只是以正常方式导航,一切正常。
答案 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解决了我的问题。