我在dispatch
操作完成后尝试执行某项操作,类似的问题导致我尝试使用.then
。我收到一个它不存在的错误this.props.dispatch().then is not a function
:
export function unpackStore(redux_store, namespace) {
// namespace is determined by what name you gave each reducer in combineReducers; client/reducers/index.js
let final_props = {};
let KEYS = Object.keys(redux_store[namespace]);
for (let key of KEYS) {
final_props[key] = redux_store[namespace][key];
}
return final_props;
}
export function basicUnpackStoreClosure(namespace) {
return function(store) {
let props = unpackStore(store, namespace);
return props;
}
}
@connect(basicUnpackStoreClosure('login_info'))
export default class LoginPage extends MyComponent {
constructor(props) {
let custom_methods = [
'handleLoginOrRegisterToggle',
'handleOnKeyDownInInputs',
'onLoginSubmit',
'onRegisterSubmit',
]
super(props, custom_methods);
this.state = {
mode: 'login',
email: '',
password: '',
password_confirm: ''
};
if (props.mode == 'register') {
this.state.mode = 'register';
}
}
onLoginSubmit() {
let self = this;
let reroute = function() {
browserHistory.push(self.props.destination_url);
}
this.props.dispatch({type: 'LOG_IN', payload: "fake@fake.com"})
.then((response) => {
browserHistory.push(self.props.destination_url);
})
}
当this.setState
完成时,我们也尝试过你做某事的方式,并将其作为第二个arg传递:
this.props.dispatch({type: 'LOG_IN', payload: "fake@fake.com"}, reroute)
既没有奏效。使用this.props.dispatch
装饰器时@connect
似乎是免费的。如何在使用" LOG_IN"更新此Redux存储之后运行某些内容。动作?
答案 0 :(得分:1)
通常,连接HOC用于将动作与组件绑定。例如,
export default connect(mapStateToProps, mapDispatchToProps)(ApplicationContainer);
执行此操作后,then this.props.getApplications
将绑定在getApplications
是您需要触发的操作的位置。
根据您的评论,如果您想要访问this.props.dispatch
INSTEAD绑定操作,只需调用connect()
而不传递任何映射器,默认行为将注入调度。
答案 1 :(得分:0)
您可以安装“ redux-promise”中间件并将其包含在您的商店中。这里的问题是诺言没有兑现。包括“ redux-promise”中间件将解决该问题