Я пытаюсь внедрить redux-сагу в приложение реакции, уже использующее redux.Моя первая цель - ввести сагу, когда пользователь пытается войти в систему.
Форма входа отправит «USER_LOGIN_REQUEST», а сага отвечает за вызов бэкэнда, а затем отправку «USERS_LOGIN_SUCCESS» после завершения.,Я вижу, что 'USER_LOGIN_REQUEST' является редуктом devtool, но не 'USERS_LOGIN_SUCCESS'.
Я не вижу ошибок в журнале консоли, и отладчик не прерывается в саге.Есть идеи, почему это не работает?
store.js
import { combineReducers, createStore, applyMiddleware } from 'redux'
import * as Reducers from './reducers'
import { composeWithDevTools } from 'redux-devtools-extension';
import createSagaMiddleware from 'redux-saga'
import rootSaga from './sagas'
const rootReducer = combineReducers({
login: Reducers.loginReducer
})
const sagaMiddleware = createSagaMiddleware();
export default createStore(
rootReducer,
composeWithDevTools(
applyMiddleware(sagaMiddleware)
)
)
sagaMiddleware.run(rootSaga);
rootSaga.js
import { all, call, delay, spawn } from 'redux-saga/effects'
import { userLoginRequestSaga } from "./loginSaga";
const makeRestartable = (saga) => {
return function* () {
yield spawn(function* () {
while (true) {
try {
yield call(saga);
console.error("unexpected root saga termination. The root sagas are supposed to be sagas that live during the whole app lifetime!",saga);
} catch (e) {
console.error("Saga error, the saga will be restarted",e);
}
yield delay(1000); // Avoid infinite failures blocking app TODO use backoff retry policy...
}
})
};
};
const sagas = [
userLoginRequestSaga
].map(makeRestartable);
export default function* rootSaga() {
yield sagas.map(saga => call(saga));
}
loginSaga.js
import { call, delay, spawn, put, takeEvery } from 'redux-saga/effects'
export function* getLoginDetails() {
//yield delay(100)
yield put({ type: 'USERS_LOGIN_SUCCESS' })
}
export function* userLoginRequestSaga() {
yield takeEvery('USER_LOGIN_REQUEST', getLoginDetails)
}
package.json
{
"name": "MyApp",
"version": "0.1.0",
"private": true,
"dependencies": {
"react": "^16.8.5",
"react-dom": "^16.8.5",
"react-redux": "^6.0.1",
"react-router-dom": "^5.0.0",
"react-scripts": "2.1.8",
"redux": "^4.0.1",
"redux-actions": "^2.6.5",
"redux-devtools-extension": "^2.13.8",
"redux-saga": "^1.0.2"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": [
">0.2%",
"not dead",
"not ie <= 11",
"not op_mini all"
]
}
Спасибо за вашу помощь.