React native 如何将数据从一个组件传递到导航器以及从导航器传递到组件

React native 如何将数据从一个组件传递到导航器以及从导航器传递到组件,react-native,react-navigation,React Native,React Navigation,我实际上是在做一个登录系统,当我的用户登录时,登录组件必须将数据发送到我的主屏幕,但我真的不知道怎么做 事实上,当用户登录时,我会这样做: User.username=data.username; User.id=responseJson.id; User.token=responseJson.token; this.props.navigation.navigate('Main',{User:User}); 用户是一切保存和工作的地方 当交换机在AppContainer内导航时,数据被发送到

我实际上是在做一个登录系统,当我的用户登录时,登录组件必须将数据发送到我的主屏幕,但我真的不知道怎么做

事实上,当用户登录时,我会这样做:

User.username=data.username;
User.id=responseJson.id;
User.token=responseJson.token;
this.props.navigation.navigate('Main',{User:User});
用户是一切保存和工作的地方

当交换机在AppContainer内导航时,数据被发送到主交换机:

导出默认createAppContainer(createSwitchNavigator(
{
Auth:{screen:AuthStack,导航选项:{tabBarVisible:false},
主:{screen:MainStack},
},
{
initialRouteName:“Auth”
}),
);
因此,作为一名底部导航员的Mainstack的工作方式如下:

const-MainStack=createBottomTabNavigator(
{
服务:{
屏幕:主页,
导航选项:{
tabBarLabel:“服务”,
tabBarIcon:({tintColor})=>(
)
},
},
我知道它不完整,我有其他屏幕,不仅仅是服务,只是想避免粘贴太长的功能

那么,是否可以将此数据“用户”发送到我的主屏幕?
我愿意接受任何建议或答案,这是我的第一个react原生项目,因此可能存在一些错误:)

您可能希望将用户数据保存在应用程序中(将其保存在存储中,以便用户离开应用程序后进入并保持登录)。这就是react navigation具有switchNavigator(您正在使用的一个)的原因。为了持久化数据,您可以使用AsyncStorage保存用户数据,并在switch navigator构造函数中检查用户数据是否已在存储中可用,然后决定是否导航到应用程序或身份验证页面。事实上,React Navigation提供了一个示例:。由于您是RN新手,以下是关于管理数据的额外提示:您可以在每个组件中使用仅针对该特定组件的状态(这也是被动的),您可以使用应用程序中所有组件之间共享的全局数据(存储)(选中react-redux/flux/mobx),您可以通过在道具中传递数据/函数,将父组件的数据共享给子组件(aka attributes),您可以使用新的React context api来使用提供者(也像父组件和子组件之间共享的存储)

我做了一些可能更容易理解的事情:

我在组件登录中从外部api获取用户数据,它运行良好。要从登录到主页,我使用以下方法:

this.props.navigation.navigate('Main',{User:User})
因此,在Main上,谁打开Mainstack屏幕谁是bottomTabNavigator,如果我没有犯任何错误,我发送的用户数据就在这个Mainstack上,但我不知道如何获取它以及如何将它共享给其他组件。 每个组件都有自己的js文件,只有App容器和Authstack/Mainstack在同一个文件中


希望您能理解!

谢谢您的回答,这不是我真正想要的。我不想保留用户数据,而是将其从我的登录组件传输到我的主页组件。当主页位于Mainstack上时,一个BottomTabNavigator和登录位于AuthStack上时,一个StackNavigator。它们由应用程序容器链接。我可以创建一个小模式如果你真的不明白,你的意思是想把用户数据从一个组件发送到另一个组件吗?如果是,请查看管理数据的提示;我提到了在道具中传递这些数据,对我来说,我正在使用mobx创建一个存储,我可以在其中导入数据并在任何组件中使用数据。即使其中一个组件在堆栈中,它也会工作吗Navigator和bottomTabNavigator中的另一个?他们唯一共享的是来自父母的AppContainer