У меня есть sagas.js
в containers/App/sagas.js
, который содержит сагу входа в систему, я пытаюсь вызвать ее из всплывающего окна входа в систему, которое также имеет свой собственный sagas.js
(components/LoginPopup/sagas.js)
и связал следующее решение вместе:
// containers/App/saga.js:
export const LOGIN = 'FUNAPP/App/LOGIN';
export const requestLogin = (payload: Object) => ({
type: LOGIN + REQUESTED,
payload,
});
export function* LoginRequest(payload) {
window.alert("LOGIN REQUEST ");
window.alert(payload)
}
export default function*(): Saga<void> {
yield [
takeLatest(LOGIN + REQUESTED, LoginRequest)
];
}
// components/LoginPopup/saga.js:
import { requestLogin, LoginRequest, LOGIN } from '../../containers/App/sagas';
export default function* (): Saga<void> {
yield [
takeLatest(LOGIN + REQUESTED, LoginRequest)
]
}
// components/LoginPopup/index.js
import { requestLogin } from '../../containers/App/sagas'
const mapStateToProps = state => ({
});
const mapDispatchToProps = dispatch => ({
requestLogin: (payload) => dispatch(requestLogin(payload))
});
export default compose(
injectSagas({ key: 'app', saga, reducer }),
connect(mapStateToProps, mapDispatchToProps)
)(LoginPopup);
Это похоже на грязный способ работы, я надеялся, что все, что мне нужно сделать, это импортировать функцию requestLogin
, и все будет просто работать, или, по крайней мере, что-то более чистое, чем экспорт всех соответствующихфункционирует в саге LoginPopup
там.