Отправление не может быть запущено от редуктора
Если компонент должен выполнить проверку состояния, тогда используйте третий параметр connect
, он же mergeProps :
const mapStateToProps = state => ({
someValue: // ...,
// ...
})
const mapDispatchToProps = dispatch => {
return {
onClick: () => dispatch({type: DO_SOMETHING}),
// ...
}
}
const mergeProps = (stateProps, dispatchProps, ownProps) => {
const onClick = () => {
if (stateProps.someValue) {
dispatchProps.onClick();
}
}
return ({
...stateProps,
...dispatchProps,
onClick
})
}
export default connect(mapStateToProps, mapDispatchToProps, mergeProps)(MyComponent)
Если проверка состояния не обязательно должна быть частью компонента, проверьте состояние в саге:
компонент:
const mapDispatchToProps = dispatch => {
return {
onClick: () => dispatch({type: MAYBE_DO_SOMETHING}),
// ...
}
}
сага:
function* onMaybeDoSomething(action) {
const someValue = yield select(getSomeValue)
if (someValue) {
yield put({ type: DO_SOMETHING })
}
}
export default function* () {
takeLatest(MAYBE_DO_SOMETHING, onMaybeDoSomething)
}