В компоненте моей домашней страницы this.context.router не определено.Я использую следующие зависимости:
"@material-ui/core": "^3.9.3",
"@material-ui/icons": "^3.0.2",
"history": "^4.9.0",
"moment": "^2.24.0",
"prop-types": "^15.7.2",
"react": "^16.8.6",
"react-dom": "^16.8.6",
"react-router-dom": "^5.0.0",
"react-scripts": "2.1.8",
"react-swipeable-views": "^0.13.1"
И мой index.js:
import React from 'react';
import ReactDOM from 'react-dom';
import {Switch, Router, Route, BrowserRouter } from 'react-router-dom';
import {MuiThemeProvider, createMuiTheme } from '@material-ui/core/styles';
import * as serviceWorker from './serviceWorker';
import UserApp from 'components/App.js';
ReactDOM.render((
<MuiThemeProvider theme={createMuiTheme({typography: { useNextVariants: true, },})}>
<BrowserRouter>
<Switch>
<Route path='/' component={UserApp} />
</Switch>
</BrowserRouter>
</MuiThemeProvider>
), document.getElementById('root'));
serviceWorker.register();
Компоненты / App.js содержимое:
import React, { Component } from 'react';
import Header from 'components/layout/Header.js';
import Footer from 'components/layout/Footer.js';
import Main from 'components/layout/Main.js';
class App extends Component {
constructor(props) {
super(props);
this.state = {
navOpen: false
};
}
openLeftNav=()=>{}
render() {
return (
<div className="site-app">
<Header {...this.props} openLeftNav={this.openLeftNav} />
<Main />
<Footer />
</div>
);
}
}
export default App;
Mainнаш внутренний файл маршрута приложенияСтруктура Main.js:
import React from 'react';
import { Switch, Route } from 'react-router-dom';
import HomePage from 'components/app/account/Home.js';
const Main = () => (
<main>
<Switch>
<Route exact path='/' component={HomePage}/>
</Switch>
</main>
);
export default Main;
И мой файл Home.js:
import React from 'react';
import PropTypes from 'prop-types';
import classNames from "classnames";
import withStyles from "@material-ui/core/styles/withStyles";
import landingPageStyle from "assets/jss/landingPage.jsx";
class Home extends React.Component {
constructor(props, context) {
super(props, context);
this.state = {
expanded: null,
}
}
componentDidMount() {}
testFunction=()=>{
console.log(this.context);
this.context.router.history.push('/test-page');
}
render() {
return (
<div>
<Button color="primary" onClick={this.testFunction}>Click Me</Button>
</div>
)
}
}
Home.contextTypes = {
router: PropTypes.object.isRequired
};
export default withStyles(landingPageStyle)(Home);
Я хочу условно перемещаться, используя this.context.route, Может кто-нибудь помочьмне почему this.context.router не определено?Этот код работал раньше с предыдущей версией реагировать [v16.3] реагировать-маршрутизатор-дом [v4.2.2] и материал-ui [v1.1.0], но теперь он не работает.