Как перенаправить на страницу после нажатия из боковой панели в React?

#javascript #reactjs #routes #react-router

#javascript #reactjs #маршруты #react-маршрутизатор

Вопрос:

Я пытаюсь создать side-bar с ListItem помощью и перенаправить на страницу после нажатия на нее. Ниже то, что я пытаюсь. У меня есть 2 компонента класса в моем index — один есть side menu , а другой — компонент для рендеринга «depositLayout». Кажется, когда я нажимаю на нее, страница не может отобразить компонент и только url изменен. Я что-то упускаю? Большое спасибо, что помогли мне.

Код:

index.js:

 function App(props){
  
  return(
    <AppBar />
      <div>
        <Switch>
          <Route path="/deposit" exact component={depositLayout}></Route>
          <Route path="/"></Route>
        </Switch>
       </div>
  )  
}
const contentDiv = document.getElementById("root");
const gridProps = window.gridProps || {};
ReactDOM.render(React.createElement(App, gridProps), contentDiv);
  

AppBar.js

 class AppBar extends React.Component {
  render() {
  return (
    <SideBar></SideBar>
  );
}
export default AppBar;
  

SideBar.js

 class SideBar extends React.Component {
  constructor(props) {
    super(props);
      this.state = {
      popSideBar: false,
  };
  //some control sidebar behavior

  sideBarItem = item =>(
    <div>
      <List>
        <ListItem button key={'deposit'} component={Link} to="/deposit">
          <ListItemText primary={'Bank'}/>
        </ListItem>
      </List>
    </div>
  );
  render() {
    const { classes } = this.props;
    return (
      <Router>
        <SwipeableDrawer>
          {this.sideBarItem ('popSideBar')}
        </SwipeableDrawer>
      </Router>
    );  
  }
}
export default SideBar ;
  

Ответ №1:

Если я правильно понял вашу проблему, попробуйте изменить эту часть

  sideBarItem = item =>{
   return(
    <div>
      <List>
        <ListItem button key={'deposit'} component={Link} to="/deposit">
          <ListItemText primary={'Bank'}/>
        </ListItem>
      </List>
    </div>
   )
  }
  

Комментарии:

1. Спасибо за ваш ответ. Ваше направление правильное. Я обнаружил, что когда я нажимаю на боковую панель, она отображает только саму себя, но не всю страницу. Но при добавлении возврата возникает ошибка.

Ответ №2:

Похоже, вам не хватает компонента «BrowserRouter» (часто импортируемого как «Маршрутизатор») в вашем index.js:

 import BrowserRouter as Router;

function App(props){
  return(
    <Router>
        <AppBar />
        <div>
            <Switch>
                <Route path="/deposit" exact component={depositLayout}></Route>
                <Route path="/"></Route>
            </Switch>
       </div>
   </Router>)  
}