我的redux传奇使用useSelector打印未定义状态

问题描述 投票:0回答:1

我有这个传奇,可以发出http请求并在reducer中进行调度:

// 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且此值未定义。为什么?

这是我的index.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'));

这是我的根减速器:

import currentUser from './login'
import { combineReducers } from 'redux'

const rootReducer = combineReducers({
    currentUser
})

export default rootReducer
reactjs redux redux-saga
1个回答
0
投票
但是我将一个setTimeOut放入console.log中,变量filiais且此值未定义。为什么?
© www.soinside.com 2019 - 2024. All rights reserved.