我在收到数据时尝试使用asynchStorage
到dispatch
次操作:
componentWillMount() {
AsyncStorage.getItem("loggedIn")
.then(this.props.dispatch(isLoadingCredentials(true)))
.then(
data =>
data
? this.props
.dispatch(setCredentials(JSON.parse(data)))
.then(this.props.dispatch(navigate("Month")))
.then(
this.props.dispatch(
isLoadingCredentials(false)
)
)
: this.props.dispatch(isLoadingCredentials(false))
);
}
使用redux connect
export default connect(mapStateToProps)(HomeScreen);
我收到错误:
Possible Unhandled Promise Rejection (id: 0):
TypeError: _this2.props.dispatch(...).then is not a function
TypeError: _this2.props.dispatch(...).then is not a function
如何在收到数据时发送动作?
答案 0 :(得分:0)
尝试定义mapStateToProps
并将其作为第二个参数传递给const mapDispatchToProps = dispatch => ({
isLoadingCredentials: (loadingCredentials) => (
dispatch(isLoadingCredentials(loadingCredentials))
)
})
。
connect
您可以使用bindActionCreators作为Pegase745建议。它是上述的简写。
然后通过connect(mapStateToProps, mapDispatchToProps)(HomeScreen)
将其传递给您的组件。
dispatch
然后你会像这样使用你的功能,注意那里没有componentWillMount() {
AsyncStorage.getItem("loggedIn")
.then(() => this.props.isLoadingCredentials(true))
...
}
属性。
AsyncStorage
您可能希望重构对isLoadingCredentials(true)
的来电,因为一旦Promise完成后您就会调用componentWillMount() {
this.props.isLoadingCredentials(true);
AsyncStorage.getItem("loggedIn")
.then((user) => {
// You have your User, do as you wish
// Add setCredentials and others to mapDispatchToProps
})
.catch(() => {
this.props.isLoadingCredentials(false); // Error
});
}
。
{{1}}