我有一个mapDispatchToProps
函数,如下所示。
export function mapDispatchToProps(dispatch, ownProps) {
return {
handleChangeLang: changeLocaleDispatcher(dispatch),
handleChange: handleChangeDispatcher(dispatch),
handleSubmit: handleSubmitDispatcher(dispatch)
}
}
我刚刚将redux-thunk
添加到了我的项目中,因此我可以从我的动作创建者处访问state
(认为这是正确的术语)。
redux-thunk
中的任何文档都没有概述如何从getState
访问mapDispatchToProps
。文档dispatch
使用store.dispatch
方法。
答案 0 :(得分:1)
你的初始语法是错误的," hacky"例子也不是你应该怎么做。
示例如下:
import {thunkAction1, thunkAction2} from "myActions";
import {bindActionCreators} from "redux";
const mapDispatchToProps(dispatch) => {
return {
manuallyBoundAction : (...args) => dispatch(thunkAction1(...args)),
autoBoundAction : bindActionCreators(thunkAction2, dispatch),
multipleActionsTogether : bindActionCreators({thunkAction1, thunkAction2}, dispatch)
}
};
不,getState
本身无法在mapDispatchToProps
内访问。它可以在thunk中使用,但不是mapDispatch
。
您可能需要阅读this answer on why thunks exist以及async actions上的Redux文档。
答案 1 :(得分:0)
因此,虽然我在您的问题中没有看到您当前的动作创建者,但我会假设它是ES6 / ES2015 javascript。
以下应该可以让你自由地抓住任何一个州。由于你有redux-thunk
,你应该很高兴。
export function setActivity(activityName) {
return function (dispatch, getState) {
dispatch({
type: SET_ACTIVITY,
description: 'Set the name of the activity being done now',
currentActivityName: activityName,
currentActivityData: getState().activityStore.activities[activityName]
});
};
}
activityStore 与您为该特定缩减器定义的内容相同,请参见下文。
export const reducers = {
activityStore: ActivityStore.reducer,
someOtherStore: SomeOtherStore.reducer
};
答案 2 :(得分:-1)
Hacky修正:/
let ProvidedApp = (serverProps) => {
let store = getStore(serverProps)
let ConnectedApp = connect(
mapStateToProps,
mapDispatchToProps(store)
)(App)
return (
<Provider store={store}>
<ConnectedApp/>
</Provider>
)
}
export function mapDispatchToProps(store) {
return (dispatch, ownProps) => {
return {
handleChangeLang: store.dispatch(changeLocaleDispatcher),
handleChange: store.dispatch(handleChangeDispatcher),
handleSubmit: store.dispatch(handleSubmitDispatcher)
}
}
}