У меня есть этот код магазина саги-редуктора, который теоретически должен запускать событие саги на dispatch
, но я вижу, что никаких действий не происходит вообще. Этот код работает на реагировать.
Соответствующий вопрос SO: Redux saga - рабочая сага не вызывается по реагирующему нативу , но решение устарело, поскольку take*
форма redux-saga
устарела.
Код ниже -
- App.js вызывает configureStore (), который возвращает store и запускает сагу
промежуточное программное обеспечение.
- Store вызывает rootSaga.js, который возвращает все саги.
- rootSaga.js вызывает loginSaga.js (userLogin) Saga
rootSaga.js
import { takeEvery } from "redux-saga/effects";
export function* rootSaga() {
yield takeEvery(LoginSagaConstants.LOGIN, userLogin)
}
loginSaga.js
export function* userLogin(action) {
console.log("userLogin not getting called");
const response = yield call(LoginAPI.login, action.user);
console.log(response);
...
}
loginScreen.js
console.log("start dispatching");
dispatch({
type: sagaConstants.LOGIN,
user: {
username: "username",
password: "password",
robottest : "robottest"
}
});
store.js
import {createStore, applyMiddleware, compose} from "redux";
import {createLogger} from 'redux-logger'
import createSagaMiddleware from 'redux-saga'
const initialState = {};
// import all Reducers
import {reducers} from "./reducers";
// import all Sagas
import { rootSaga } from "./sagas";
// define middlewares
let middlewares = [];
// create and add the saga middleware
const sagaMiddleware = createSagaMiddleware();
middlewares.push(sagaMiddleware);
//add the freeze and logger dev middleware
if (process.env.NODE_ENV !== 'production') {
middlewares.push(createLogger());
}
// apply the middleware
let middleware = applyMiddleware(...middlewares);
const enhancer = compose(
middleware
)
export default function configureStore() {
const store = createStore(reducers, initialState, enhancer);
// run saga middleware
sagaMiddleware.run(rootSaga);
return store;
}
App.js
...
import configureStore from './store'
const store = configureStore();
...
render() {
return (
<Provider store={store}>
<RootStack/>
</Provider>
);
}
моя консоль только печатает start dispatching
и больше ничего не происходит.