У меня есть эта сага, которая делает http-запрос и отправляет сообщение в редукторе:
// worker Saga: will be fired on GET_FILIAIS_REQUEST actions
function* fetchFiliais(action) {
try {
const data = yield call(LoginServices.fetchFiliaisApi);
yield put(allActions.loginActions.receiveFilialData(data));
} catch (e) {
yield put({type: 'FETCH_FILIAIS_FAILED', message: e.message})
}
}
/*
Starts fetchFiliais on each dispatched `GET_FILIAIS_REQUEST` action.
*/
export default function* loginSaga() {
yield takeEvery("GET_FILIAIS_REQUEST", fetchFiliais);
}
В моем компоненте входа в систему я называю эту сагу:
const Login = props => {
const dispatch = useDispatch()
const filiais = useSelector(state => state.filiais)
useEffect(() => {
dispatch({type: 'GET_FILIAIS_REQUEST'})
setTimeout(function(){ console.log(filiais); }, 5000);
}, [dispatch, filiais])
Это мой редуктор: в моем console.log () печатает правильный тип и полезную нагрузку, и печатает «введите правильный регистр»:
const currentUser = (state = {}, action) => {
console.log(action.type)
console.log(action.payload)
switch(action.type){
case "SET_USER":
return {
...state,
user: action.payload,
loggedIn: true
}
case "LOG_OUT":
return {
...state,
user: {},
loggedIn: false
}
case "RECEIVE_FILIAL_DATA":
console.log('enter correct case')
return {
...state,
filiais: action.payload
}
default:
return state
}
Но я помещаю один setTimeOut в console.log переменную filiais, и это значение не определено. Почему?
Это мой индекс. js:
import loginSaga from './pages/login/login-form/saga'
// create the saga middleware
const sagaMiddleware = createSagaMiddleware()
const store = createStore(
rootReducer,
applyMiddleware(sagaMiddleware)
)
// then run the saga
sagaMiddleware.run(loginSaga)
ReactDOM.render(
<Provider store={store}>
<Router>
<Route path="/" component={App} />
</Router>
</Provider>, document.getElementById('root'));
Это мой root редуктор:
import currentUser from './login'
import { combineReducers } from 'redux'
const rootReducer = combineReducers({
currentUser
})
export default rootReducer