react connectrouter connectedrouter connected javascript reactjs react-router redux

javascript - connectrouter - Reaccionar+Redux-router=Error no detectado: Se esperaba que el reductor fuera una funciĆ³n



react router connect (3)

Mi código funciona bien, pero tengo un problema molesto cada vez que cometo un error de codificación y obtengo un error de tiempo de ejecución. Por ejemplo, en una de mis páginas JSX hice Date() lugar de la new Date() y en lugar de informar el error real, obtuve ...

Uncaught Error: Expected the reducer to be a function.

Cualquier error que cometo casi siempre aparece así. Se informa desde createStore.js , que se encuentra en mi código de configureStore.jsx continuación.

¿Hay alguna forma de obtener un mejor informe de errores que me ayude a identificar el problema real? Cualquier ayuda o ideas son muy apreciadas !!!

Aquí está mi configuración para la referencia ...

main.jsx

import React from ''react''; import ReactDOM from ''react-dom''; import { Provider } from ''react-redux''; import { ReduxRouter } from ''redux-router''; import configureStore from ''./store/configureStore'' import routes from ''./routes''; const rootEl = document.getElementById(''app-container''); const store = configureStore(); ReactDOM.render( <div> <Provider store={store}> <ReduxRouter routes={routes} /> </Provider> </div> , rootEl );

configureStore.jsx

import { createHashHistory } from ''history''; import { applyMiddleware, createStore, compose } from ''redux''; import { reduxReactRouter } from ''redux-router''; import thunk from ''redux-thunk''; import promiseMiddleware from ''redux-promise-middleware''; import rootReducer from ''../reducers/rootReducer''; import routes from ''../routes''; export default function configureStore(initialState = {}) { const history = createHashHistory(); const middlewares = [ thunk, promiseMiddleware({ promiseTypeSuffixes: [''PENDING'',''SUCCESS'',''ERROR''] }) ]; const toolChain = [ applyMiddleware(...middlewares), reduxReactRouter({ routes, history }) ]; const store = compose(...toolChain)(createStore)(rootReducer, initialState); if (module.hot) { module.hot.accept(''../reducers'', () => { const nextRootReducer = require(''../reducers/rootReducer''); store.replaceReducer(nextRootReducer); }); } return store; }

rootReducer.jsx

import { combineReducers } from ''redux''; import { routerStateReducer } from ''redux-router''; import siteReducer from ''./siteReducer''; const rootReducer = combineReducers({ router: routerStateReducer, sites: siteReducer }); export default rootReducer;

siteReducer.jsx

import {GET_SITES} from ''../actions/siteActions''; const defaultState = { isPending: null, isSuccess: null, isError: null, error: null, data: null }; export default function siteReducer(state = defaultState, action) { switch (action.type) { case `${GET_SITES}_PENDING`: return { ...defaultState, isPending: true }; case `${GET_SITES}_SUCCESS`: return { ...defaultState, isSuccess: true, error: false, data: action.payload }; case `${GET_SITES}_ERROR`: return { ...defaultState, isError: true, error: action.payload }; default: return state; } }


Cambia la siguiente línea:

const nextRootReducer = require(''../reducers/rootReducer'');

A:

const nextRootReducer = require(''../reducers/rootReducer'').default;


Mi problema era importar Store desde la ruta del reductor raíz en lugar de la raíz del almacén empaquetado real (con devtools en la ventana y el reductor raíz, el middleware está compuesto, etc.).

import Store from ''../../../src/state/Store/reducer'';

cambiado a

import Store from ''../../../src/state/Store'';


Use export const variable_name lugar de const variable_name cuando quiera exportar esa variable.

Por ejemplo: rootReducer.jsx debe reescribirse como

import { combineReducers } from ''redux''; import { routerStateReducer } from ''redux-router''; import siteReducer from ''./siteReducer''; export const rootReducer = combineReducers({ router: routerStateReducer, sites: siteReducer }); export default rootReducer;

Tenga en cuenta el especificador de exportación adicional con const rootReducer