【发布时间】:2019-09-10 19:27:15
【问题描述】:
我对 React Native 有点陌生。
我正在尝试为每个组件添加一个值,主要是登录信息。
我正在使用这个库:
https://github.com/mahomahoxd/react-native-login-keycloak
您通过这种方式获取登录信息:
import Login from 'react-native-login-keycloak';
const gatheredTokens = await Login.getTokens();
现在很明显,await 需要在异步函数中,所以我尝试如下:
async componentWillMount() {
const gatheredTokens = await Login.getTokens();
this.setState({ gatheredTokens: this.state.gatheredTokens });
}
但是这看起来很混乱 - 首先,componentWillMount 显然已被弃用(我想我可以将其切换为 componentDidMount),而且它还需要我在每个组件中基本上复制此过程。乱码重复!
有什么更纯粹的方法来做到这一点?我猜是高阶组件或其他结构?
谁能给我一个例子,说明我将如何向我的所有组件提供这个(我正在使用 Redux,所以通过 Redux 或其他方法很好) - 我只是不确定如何确保数据是处理并在任何需要的地方可用,我想要最“反应”的方式。
【问题讨论】:
-
您可以从父组件中获取此数据并将其作为道具传递给每个子组件。
-
如果您使用的是 redux,那么只需设置您的中心状态并将其映射到需要访问数据的任何组件。 redux 文档中有很多示例:redux.js.org/basics/usage-with-react
-
使用 redux 选择器?
mapStateToProps或将它们作为 prop 从父组件传递下来。 -
@MattAft - 我会在我的 store.js 中还是在单独的 action/reducer 中这样做?你能写一个简单的例子吗?我或多或少了解 Redux,但我才用了几个月
-
如果您希望能够修改状态值,则需要设置一个动作/减速器。我提供的链接为您提供了一个简单的待办事项应用程序的示例。问题是如果应用程序关闭以自动登录,您是否希望保存它?因为那样你就可以使用 RN 的异步存储了:facebook.github.io/react-native/docs/asyncstorage
标签: javascript reactjs react-native