无法通过导航路线传递财产

时间:2019-07-30 09:56:03

标签: react-native

我试图根据以下基本架构通过导航路线(抽屉导航)传递属性:

推送参数

   onPress={() => {
            this.props.navigation.navigate('Screen2', {
              user: 'USER_A'
            });

在Screen2上获取参数

const { navigation } = this.props;
const userName = navigation.getParam('user', null);

但是Screen2还包含它自己的导航(堆栈导航)的问题...

const CollapsScr = createStackNavigator({
    Collaps: { screen: Screen2 }
});

因此,当我从Screen2中删除堆栈导航时,我可以毫无问题地传递参数,但是我希望保持这种导航状态,并且仍然能够通过抽屉导航路线传递参数。有什么解决办法吗?

1 个答案:

答案 0 :(得分:1)

您可以执行this.props.navigation.dangerouslyGetParent().getParam()来获取所需的父参数。

您也可以采用其他方法。

在导航之前,您可以进行this.props.navigation. getChildNavigation(°YourGrandChildKey°).setParams()YourGrandChildKey是您在抽屉上定义的那个

编辑。

我给出的第一个解决方案为您提供针对特定问题的参数。我不知道您的应用程序将如何工作。

取决于您在评论中的要求,具体取决于。我一直使用redux来存储我100%确定需要在我的应用程序中全部存储的数据,或者可以随着时间变化而更改2个或更多屏幕布局的数据。

第一个解决方案的问题是,您要获取的数据存储在应用程序的另一个位置,而参数user在整个抽屉中可见。

我建议创建一个redux基本结构。这样一来,您就知道需要将哪些数据放到redux上,几乎可以肯定在其他地方需要这些数据,或者至少对于将来的更新是可以到达的。

对于您的特定情况,我会将用户数据放在redux上,因为这有助于向您提供有关此应用程序会话的信息。

如前所述,您必须选择认为适合您的应用程序的解决方案,如果您仅需要针对特定​​屏幕的变量,请使用第二种解决方案,这样只有屏幕具有该信息,而无需填充应用程序的各个部分包含不必要的数据。

希望这对您有帮助!