我正在设置一个使用react-native-navigation
的应用程序。我想在导航中坚持一些价值观。当我手动触发导航时,可以将它们作为参数传递给navigate
的调用。但是,当我使用插件提供的本机导航时,无法将其设置为参数。
在整个应用程序中共享API令牌而不需要将其存储在AsyncStorage中的最佳方法是什么?我是否缺少一些明显的解决方案?
我的App.js:
const AppStack = createBottomTabNavigator({
Members: createStackNavigator({
MemberList: MemberList,
AddMember: NewMember,
},{
mode: 'card',
initialRouteName: "MemberList"
}),
Scan: Scanner
});
const AuthStack = createStackNavigator({ Login: Login });
export default createAppContainer(
createSwitchNavigator(
{
AuthLoading: AuthLoadingScreen,
App: AppStack,
Auth: AuthStack
},
{
initialRouteName: "AuthLoading"
}
)
);
Auth堆栈负责身份验证,在获取API令牌后,我使用以下方法手动重新路由到App:
this.props.navigation.navigate({
routeName: 'App',
params: { auth_token: data.auth_token },
action: this.props.navigation.navigate({
routeName: 'MemberList',
params: { auth_token: data.auth_token}
})
});
当我开始使用底部的Nav导航时,会出现问题,因为这是由插件处理的,似乎没有持久的参数。
答案 0 :(得分:2)
所以,我知道Redux已被收购-但我要在这里给我2便士。
对于
在您的应用程序中,您想弄清楚状态将变得多么复杂。在帖子评论中,我看到您将Redux视为“过度杀伤力”-起初看起来像是这样,因为您只需要使用一次全局状态(现在)。
您需要问的问题是:我的申请会变成多大?如果您要构建一个仅调用API的应用程序-那么我想应该就是这样!但是,我的猜测是您的应用程序会更加复杂。
当您开始使用状态时,redux是一种很好地理解和控制该状态以及全局访问状态的好方法。因此,如果这可以节省您几个小时的时间(而不是将本地状态作为道具),那么我会去做。
文档:https://redux.js.org/introduction/getting-started
反对
很明显,如果您确实认为它过大,则可以使用异步存储之类的替代解决方案。请记住,尽管这并不安全,所以您不应该存储敏感数据。
Is React Native's Async Storage secure?
其他类型的存储空间
您可以为应用程序使用其他类型的存储,通常是其他类型的DB存储。
https://dev.to/purvak_pathak/the-database-selection-guide-for-react-native-3kfm
它们包括:
答案 1 :(得分:1)
使用React-Redux,Redux在应用程序级别创建集中式存储。用户成功登录后,将令牌保存在存储区中,您就可以调用它,并在整个应用程序中使用该状态“值”在所需的任何组件中。 前往https://redux.js.org 也 访问https://medium.com/@aurelie.lebec/redux-and-react-native-simple-login-example-flow-c4874cf91dde
答案 2 :(得分:0)
If you only want to store a simple static data you can create a static variable available everywhere in the app.
export static var authToken = "your token"
Then you just have to import it when you need it.