尝试了Internet上几乎所有可用的内容,但无法解决问题。当我安装react-router-dom
并将Routes
和BrowserRouter
添加到项目中时,我遇到了以下问题:
Uncaught TypeError: Cannot read property 'func' of undefined
在捆绑的index.js
中,有一行显示应用失败:
var func = _react.PropTypes.func,
找到一些解决方案,说明应使用react-router 3.2.0
,但这不是重点。我想使用新的react-router-dom
,当前安装的版本是:
"react-router-dom": "^4.4.0-alpha.1",
注意::请不要提及
PropTypes
,我知道它们已经移到了单独的库中,并且我没有在项目中使用它们。
编辑:路由代码:
import React from 'react';
import {Route, Switch, BrowserRouter} from 'react-router-dom';
//import createHashHistory from 'history/createHashHistory';
import App from './App';
import Login from './components/Login/Login';
import PrivateRoute from './components/PrivateRoute/PrivateRoute';
import Unauthorized from './components/Unauthorized/Unauthorized';
//const history = createHashHistory();
const Routes = () => (
<BrowserRouter>
<Switch>
<Route exact path="/login" component={Login}/>
<Route exact path="/unauthorized" component={Unauthorized}/>
<PrivateRoute exact path="/" component={App}/>
</Switch>
</BrowserRouter>
);
export default Routes;
PrivateRoute组件代码:
import React, {Component} from "react";
import {bindActionCreators} from "redux";
import {Redirect, Route} from "react-router-dom";
import {connect} from "react-redux";
import * as authActions from '../../redux/actions/authActions';
class PrivateRoute extends Component {
render() {
let {component: Component, loggedUser, ...rest} = this.props;
return (
<Route {...rest} render={(props) => (
loggedUser ?
<Component {...props}/>
:
<Redirect
to={{
pathname: "/login",
state: {from: props.location}
}}
/>
)}/>
);
}
}
function mapStateToProps(state, props) {
return {
loggedUser: state.loggedUser
}
}
function mapDispatchToProps(dispatch) {
return {
authActions: bindActionCreators(authActions, dispatch)
}
}
export default connect(mapStateToProps, mapDispatchToProps)(PrivateRoute);