【发布时间】:2016-05-04 00:22:01
【问题描述】:
在我的应用程序中,我有 2 个组件(Page 和 Home)。
Home 扩展 Page 像这样:
export default class Home extends Page
而Page 只是扩展Component。
在Page我有一种方法可以从AsyncStorage获取用户数据
async getUser() {
// get from storage
this.setState({user});
}
上面是在Page的constructor上调用的。
我遇到的问题是Home 在componentWillMount 上有一个依赖于this.state.user 的方法。显然这是行不通的,因为 getUser 方法是异步的。
有没有一种方法可以获取用户信息,并且只有在获得该信息后才调用特定方法?
export default class Page extends Component {
async getUser() {
// get from AsyncStorage
this.setState({user});
}
componentWillMount() {
this.getUser();
}
}
export default class Home extends Page {
async foo(user_id) {
this.setState({something});
}
componentWillMount() {
this.foo(this.state.user);
}
render() {
return <Text>{this.state.something}</Text>;
}
}
【问题讨论】:
-
this.state.user依赖什么方法,什么时候调用? -
Home.componentWillMount上还有另一个异步方法,它依赖于this.state.user -
我已经用示例代码更新了问题
-
我知道这不是最优雅的选择,但是您可以在页面中获取用户之后执行一些方法,例如
page.onUserUpdate,并且您可以在主页或其他页面子类中覆盖此方法。其他选项是为用户定义一些默认值,直到该值准备好在屏幕上呈现,这种方法允许您例如在 UI 中显示某种加载用户过程。 -
你能在 Home 组件中调用 getUser 吗? componentWillMount() { super.getUser.then(this.foo) }
标签: asynchronous reactjs async-await react-native