为什么react-router-dom不会更改点击的URL?

时间:2018-07-08 19:13:13

标签: javascript reactjs react-router material-ui

使用react-router-dom时,我无法更改URL并无法加载组件。如果我手动输入URL,则将加载组件,但是,当我单击链接时,URL(和组件)不会更改。在这种情况下,我试图加载“ / industry / aerospace”页面。谢谢!

这是我的代码:

App.js:

import React from 'react'
import { compose } from 'redux'
import { Route, Switch, withRouter } from 'react-router-dom'
import { MuiThemeProvider } from '@material-ui/core/styles'

import LandingPage from '../../home'
import AnalyzerProductPage from '../../home/analyzer'
import MonitorProductPage from '../../home/monitor'
import Signout from '../../home/signout'
import Industry from '../../home/industry'

class App extends React.PureComponent {
  render() {
    return (
      <div>
        <MuiThemeProvider theme={muiTheme} >
          <Switch>
            <Route exact path="/" component={LandingPage} />
            <Route exact path="/version" component={Version} />
            <Route exact path="/signout_success" component={LandingPage} />
            <Route exact path="/signout" component={Signout} />
            <Route exact path="/liquidtool-analyzer" component={AnalyzerProductPage} />
            <Route exact path="/liquidtool-monitor" component={MonitorProductPage} />
            <Route exact path="/industry/:industry" component={Industry} />
          </Switch>
        </MuiThemeProvider>
        <NotificationHandler />
        <RestCallProgressBar />
      </div>
    )
  }
}

export default compose(
  withRouter,
)(App)

HomeHeader.js(带有页面链接):

import React, { Component } from 'react'
import PropTypes from 'prop-types'
import { Link } from 'react-router-dom'

// material-ui
import { withStyles } from '@material-ui/core/styles'

class HomeHeader extends Component {
  state = {
    value: false,
    anchorEl: null
  };

  handleIndustriesClick = (event) => {
    this.setState({ anchorEl: event.currentTarget })
  };

  handleIndustriesClose = (pageID) => {
    this.setState({ anchorEl: null })
  }

  handleDashboardClick = () => {
    this.props.history.push('/dashboard')
  };

  handleChange = (event, value) => {
    this.setState({ value })
  };


  render() {
    const { classes } = this.props
    const { value } = this.state
    const { anchorEl } = this.state

    return (
      <AppBar className={classes.appBar} elevation={this.props.elevation}>
        <Hidden smDown>
          <Grid container justify="space-between" alignItems="center">
            <Tabs value={value} onChange={this.handleChange}>
              <Tab label="monitor" />
              <Tab label="sensor" />
              <Tab 
                label="industries" 
                aria-owns={anchorEl ? 'industries-menu' : null}
                aria-haspopup={true}
                onClick={this.handleIndustriesClick}
              />
              <Menu
                id="industries-menu"
                anchorEl={anchorEl}
                open={Boolean(anchorEl)}
                onClose={this.handleIndustriesClose}
              >
                <MenuItem onClick={this.handleIndustriesClose}><Link to={'/industry/aerospace'}></Link>Aerospace</MenuItem>
              </Menu>
            </Tabs>
          </Grid>
        </Hidden>
      </AppBar>
    )
  }
}

export default withStyles(styles)(HomeHeader)

Industry.js(要加载的组件):

import React, { Component } from 'react'; 

import Typography from '@material-ui/core/Typography';
import HomeHeader from '../components/HomeHeader'

class Industry extends Component {

  render() {
    return(
      <div>
        <HomeHeader />
        <Typography>Hey</Typography>
      </div>
    )
  }
}

export default Industry

1 个答案:

答案 0 :(得分:1)

尝试从Link组件包装MenuItem:

<Link to='/industry/aerospace'>
 <MenuItem>
  Aerospace
 </MenuItem>
</Link>

由于您正在使用material-ui,因此还可以在MenuItem中使用组件属性(它将组件设置为根)

<MenuItem component={Link} to='/industry/aerospace'>
 Aerospace
</MenuItem>

希望这会对您有所帮助