javascript - 带有历史推送的 Reactjs 路由,但仅更改 URL 的视图
问题描述
我正在使用一个菜单,它有一个 ListGroupItem 并尝试使用历史推送重定向另一个组件,但只更改 url!这个 url 有效,但它不会改变视图,我必须按 enter 才能使这个工作。
我是 react 新手,尤其是路由器,我对此感到迷茫。谢谢你的帮助。
这是我的 App.js
import React, { Component } from 'react';
import './css/App.css';
import { BrowserRouter, Route, Link } from 'react-router-dom';
import Prueba from './Prueba';
import Menu from './header/Menu';
class App extends Component {
toggle(menu) {
if (this.state.collapse == menu){
this.setState({ collapse: false });
}else {
this.setState({ collapse: menu });
}
}
render() {
return (
<BrowserRouter>
<Menu/>
<Prueba/>
</BrowserRouter>
);
}
}
export default App;
这是我的另一个名为 Prueba.js 的组件
import React, { Component } from 'react';
import './css/App.css';
import { BrowserRouter, Route,Link} from 'react-router-dom';
import { ListGroup, ListGroupItem,Collapse, Container, CardBody, Card, Row, Col} from 'reactstrap';
import Pais from './UbicacionGeneral/Pais';
import { withRouter } from 'react-router';
class Prueba extends React.Component{
constructor(props) {
super(props);
this.toggle = this.toggle.bind(this);
this.state = { collapse: false };
this.routeChange = this.routeChange.bind(this);
}
routeChange() {
this.props.history.push('Pais');
}
componentDidUpdate(){
}
toggle(menu) {
if (this.state.collapse == menu){
this.setState({ collapse: false });
}else {
this.setState({ collapse: menu });
}
}
render() {
return (
<BrowserRouter>
<div className="App text-center">
<Row>
<Col md="2">
<ListGroup className="List-Principal">
<ListGroupItem className="List-Principal-Item " onClick={() => this.toggle("ubicacion")} > Ubicacion General </ListGroupItem>
<Collapse isOpen={this.state.collapse == "ubicacion"}>
<ListGroup>
<ListGroupItem onClick={this.routeChange} > Pais </ListGroupItem>
<ListGroupItem > Estado </ListGroupItem>
<ListGroupItem > Ciudad </ListGroupItem>
</ListGroup>
</Collapse>
<ListGroupItem className="List-Principal-Item tex-center"
onClick={() => this.toggle("almacen")} > Almacen </ListGroupItem>
<Collapse isOpen={this.state.collapse == "almacen"}>
<ListGroup>
<ListGroupItem > Crear - Modificar </ListGroupItem>
<ListGroupItem > Verificar Stock </ListGroupItem>
<ListGroupItem > Movimientos </ListGroupItem>
</ListGroup>
</Collapse>
</ListGroup>
</Col>
<Col md="10">
<Container>
<Route path="/Pais" component={Pais} />
</Container>
</Col>
</Row>
</div>
</BrowserRouter>
);
}
}
export default withRouter(Prueba);
最后,这是我想在历史推送中看到的组件,名为 Pais。
Pais.js
import React, { Component } from 'react';
import { ListGroup, ListGroupItem,Collapse, Container, CardBody, Card, Row, Col} from 'reactstrap';
import { Alert } from 'reactstrap';
import { withRouter } from 'react-router-dom';
class Pais extends Component {
render() {
return (
<div>
<Alert color="primary">
This is a primary alert — check it out!
</Alert>
<Alert color="secondary">
This is a secondary alert — check it out!
</Alert>
<Alert color="success">
This is a success alert — check it out!
</Alert>
<Alert color="danger">
This is a danger alert — check it out!
</Alert>
<Alert color="warning">
This is a warning alert — check it out!
</Alert>
<Alert color="info">
This is a info alert — check it out!
</Alert>
<Alert color="light">
This is a light alert — check it out!
</Alert>
<Alert color="dark">
This is a dark alert — check it out!
</Alert>
</div>
);
}
}
export default withRouter (Pais);
解决方案
有几个部分是不正确的。首先,你不应该在 Prueba.js 中使用 BrowserRouter。应该只有一个 BrowserRouter。此外,您可以将 Route 放在 BrowserRouter 或 Switch 中。由于您没有使用 BrowserRouter、Switch 和 Route 正确配置路由,因此 url 会更改,但这不会反映到您的 React 应用程序。
推荐阅读
- javascript - 使用 sass 修改 react-bootstrap 的正确方法是什么?
- c# - 使用 ASP.NET MVC 显示条形图
- python - Combine rows from different tables based on common columns pandas
- python - 如何解决 NameError: name 'api' is not defined 错误代码?
- c++ - 将 STL 队列作为参数传递给 C++ 中的另一个函数
- c# - 将 C# `using` 和 `new` 转换为 PowerShell
- c - 编写一个 C 程序,删除除最后一个字符之外的所有字符
- python - 计算python中不同数组出现的概率
- python - Pygame 中的程序地形生成是颠倒的
- r - R滚动减法矢量化替代for循环