【问题标题】:ConnectedRouter TypeError: Cannot read property 'dispatch' of undefinedConnectedRouter TypeError:无法读取未定义的属性“调度”
【发布时间】:2019-06-21 11:50:57
【问题描述】:

按照第 3 部分的教程尝试使用 React/Redux:https://tighten.co/blog/react-101-routing-and-auth

第 1 部分和第 2 部分一直很棒,直到第 3 部分我遇到了标题中的错误。到目前为止,我很确定我一直在按照教程进行操作。

非常感谢任何帮助。提前致谢。

The above error occurred in the <ConnectedRouter> component:
index.js:1446
    in ConnectedRouter (at App.js:39)
    in App (created by Context.Consumer)
    in Connect(App) (at src/index.js:11)
    in Provider (at src/index.js:10)

index.js

import React from 'react';
import ReactDOM from 'react-dom';
import App from './containers/App';
import { Provider } from 'react-redux';
import { configureStore } from './store/configureStore';

const store = configureStore();

    ReactDOM.render(
      <Provider store={store}>
        <App />
      </Provider>,
      document.getElementById('app')
    )

App.js

import React from 'react';
import { ConnectedRouter } from 'react-router-redux';
import { Route, Redirect } from 'react-router-dom'
import { history } from './../store/configureStore';
import { connect } from 'react-redux';

import Header from '../containers/Header';
import Home from '../containers/Home';
import Signup from '../containers/Signup';
import Login from '../containers/Login';
import Favorites from '../containers/Favorites';

const PrivateRoute = ({component: Component, authenticated, ...props}) => {
    return (
        <Route
            {...props}
            render={(props) => authenticated === true
                ? <Component {...props} />
                : <Redirect to={{pathname: '/login', state: {from: props.location}}} />}
        />
    );
};

const PublicRoute = ({component: Component, authenticated, ...props}) => {
    return (
        <Route
            {...props}
            render={(props) => authenticated === false
                ? <Component {...props} />
                : <Redirect to='/favorites' />}
        />
    );
};


class App extends React.Component {
    render() {
        return (
            <ConnectedRouter history={history}>
                <div>
                    <Header />

                    <div className="container">
                        <Route exact path="/" component={ Home }/>
                        <PublicRoute authenticated={this.props.authenticated }  path="/signup" component={ Signup } />
                        <PublicRoute authenticated={this.props.authenticated }  path="/login" component={ Login } />
                        <PrivateRoute authenticated={this.props.authenticated }  path="/favorites" component={ Favorites } />
                    </div>
                </div>
            </ConnectedRouter>
        );
    }
}

const mapStateToProps = (state) => {
    return { authenticated: state.auth.authenticated };
};

export default connect(mapStateToProps)(App);

ConfigureStore.js

import { createStore, compose, applyMiddleware } from 'redux';
import ReduxPromise from 'redux-promise';
import rootReducer from '../reducers';
import createHistory from 'history/createBrowserHistory';
import { routerMiddleware } from 'react-router-redux';

export const history = createHistory();

export function configureStore(initialState) {
  const store = createStore(
    rootReducer,
    initialState,
    compose (
      applyMiddleware(ReduxPromise, routerMiddleware(history)),
      window.devToolsExtension ? window.devToolsExtension() : f => f
    )
    //window.devToolsExtension ? window.devToolsExtension() : undefined
  );

  if (module.hot) {
    // Enable Webpack hot module replacement for reducers
    module.hot.accept('../reducers', () => {
      const nextRootReducer = require('../reducers').default;
      store.replaceReducer(nextRootReducer);
    });
  }

  return store;
}

【问题讨论】:

  • ConnectedRouter的父级是否有Provider元素
  • 在 index.js 中。是不是放错地方了?
  • 看起来反应路由器中的store 是未定义的。您确定要退回configureStore() 中配置的商店吗?如果是的话,如果您也将代码发布到该文件中可能会有所帮助(这可能是问题发生的地方)。
  • @emroussel,对。我已经编辑了帖子以包含 configureStore()
  • 解决了。在项目发布时恢复到旧但兼容的 npm 包 react-redux、react-router-dom/redux、redux 和 redux-promise。它现在解决了这个问题。不确定发生了什么变化。将再次调查。

标签: reactjs react-redux react-router


【解决方案1】:

解决了。在项目发布时恢复到旧但兼容的 npm 包 react-redux、react-router-dom/redux、redux 和 redux-promise。暂时不发。不确定发生了什么变化。会再调查的。

【讨论】:

【解决方案2】:

【讨论】:

    猜你喜欢
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 2016-09-05
    • 2021-12-05
    • 2020-07-20
    相关资源
    最近更新 更多