javascript - React Router 导航到页面出现在当前页面下方
问题描述
我正在使用 React JS 和 React 路由器。
这是我的代码:
这是 SomeComponent 文件:
class SomeComponent extends React.Component{
//some code
render(){
return(
<div className="somecomponent">
<h1>some heading</h1>
</div>
);
}
}
export default SomeClass;
这是我的 App.js 文件:
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import SomeComponent from './components/SomeComponent';
class SomeClass extends React.Component{
constructor(props){
//some code
}
render(){
return(
<Router>
<form onSubmit={this.handleSubmit}>
<h1>ABC</h1>
<label htmlFor="name">Your name</label>
<input className="name" type="text" placeholder="Enter your name" />
<button onClick={() => this.props.history.push("/somepath/component")}>Click Me</button>
</form>
<Switch>
<Route exact path="/somepath/component" component={SomeComponent} />
</Switch>
</Router>
);
}
}
export default SomeClass;
这是我的 index.js 文件:
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import { BrowserRouter } from 'react-router-dom';
ReactDOM.render(
(
<BrowserRouter>
<App />
</BrowserRouter>
),
document.getElementById('root')
);
布局:
这是 App.js 组件:
这是以下链接中的组件:“/somepath/component”:
我的问题:
当我单击该按钮时,它会将我定向到以下链接的页面:“/somepath/component” 但是,问题是该页面出现在上一页的下方。
导航到新页面后,我想让上一页消失。
解决方案
您的问题是form
元素不在路由组件上。如果您这样写,form
将始终可见(并且SomeComponent
始终出现在 底部form
)。您应该将其移动form
到组件中。就像是:
class SomeComponent extends React.Component{
...
render(){
return (
<form onSubmit={this.handleSubmit}>
<h1>ABC</h1>
<label htmlFor="name">Your name</label>
<input className="name" type="text" placeholder="Enter your name" />
<button onClick={() => this.props.history.push("/somepath/component")}>Click Me</button>
</form>
);
}
}
export default FormComponent;
然后在 App.js 中:
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import SomeComponent from './components/SomeComponent';
import FormComponent from './components/FormComponent';
class SomeClass extends React.Component{
constructor(props){
//some code
}
render(){
return(
<Router>
<Switch>
<Route exact path="/" component={FormComponent} />
<Route exact path="/somepath/component" component={SomeComponent} />
</Switch>
</Router>
);
}
}
export default SomeClass;
推荐阅读
- c# - 通过C#中的按键将datagridview转换为文本框
- command-line - Peforce 命令行 - 如何将 depot 文件夹替换为桌面上的现有文件夹(即“版本升级”depot 文件夹)
- python - 禁用 tkinter 菜单选项,直到另一个完全执行
- c - 如何从输出中删除多余的零?
- react-native - React Native VirtualizedLists 不应该嵌套在具有相同方向的普通 ScrollViews 中
- ansible - 您将如何检查 ansible URI 模块正在创建的 url?
- postgresql - 在同一数据库中使用 Prisma ORM 的多个服务的最佳实践?
- excel - 如何在 VBA 中为不同工作表中的不同单元格创建数据验证菜单
- r - 在 r 中执行变量的成对交互
- mysql - 在 SQL 中同时从多列和多行计数