reactjs - 在反应中提交后重定向到另一个组件
问题描述
我是 React 的新手。单击提交按钮后,我想从登录表单重定向到另一个名为 MainModule 的页面(另一个组件)。
这是我的登录表单=>
import React, {Component} from "react";
import { withRouter} from 'react-router-dom';
import {Button,FormGroup,FormControl,FormLabel,Form} from "react-bootstrap";
class Login extends Component {
constructor(props){
super(props);
this.state={
email:"",
password:""
};
}
handelChange = event =>{
this.setState({
[event.target.id]:event.target.value
},()=>{
});
}
handelSubmit = event => {
event.preventDefault();
this.props.history.push('/MainModule');
}
render()
{
return (
<div className="Login">
<Form onSubmit={this.handelSubmit}>
<FormGroup controlId="email">
<FormLabel>Email</FormLabel>
<FormControl autoFocus type="email" value={this.state.email} onChange={this.handelChange}/>
</FormGroup>
<FormGroup controlId="password">
<FormLabel>Password</FormLabel>
<FormControl type="password" value={this.state.password} onChange={this.handelChange}/>
</FormGroup>
<Button type="submit">Login</Button>
</Form>
</div>
)
}
}
export default withRouter(Login);
但问题是在我单击提交按钮后,url
更改为 MainModule 但未显示 MainMoudle 表单,仅显示当前登录表单。我认为这需要定义 MainModule 的路由,我不知道该怎么做。请帮忙。
更新
我的主要模块 =>
import React from 'react';
import { Route, Link,Switch,BrowserRouter } from "react-router-dom";
import allowance from './components/master/allowance';
class MainModule extends React.Component {
// constructor(props){
// super(props)
// }
render(){
return(
<div className="mainform">
<nav className="navbar navbar-expand-lg navbar-light bg-light">
<Link className="navbar-brand" to="/MainModule">TMS</Link>
<button className="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
<span className="navbar-toggler-icon"></span>
</button>
<div className="collapse navbar-collapse" id="navbarNavAltMarkup">
<div className="navbar-nav">
<Link className="nav-item nav-link" to={'/allowance'}>Allowance</Link>
</div>
</div>
</nav>
<div id="maincontent">
<Route path='/allowance' component={allowance} />
</div>
</div>
)
}
}
export default MainModule;
解决方案
你是对的,你必须为你的MainModule
组件定义一个路由。
在您的App.js文件中,我假设您已经设置了路由:
import React from "react"
import { BrowserRouter, Route } from "react-router-dom"
import Login from "/yourcomponentfolder/Login"
import MainModule from "/yourcomponentfolder/MainModule"
const App = () => {
return(
<BrowserRouter>
<div>
//Using exact tells react-router that you will only render this component if the URL matches exactly with the path definition.
<Route path="/" component={Login} exact/>
<Route path="/MainModule" component={MainModule}/>
</div>
</BrowserRouter>
)
}
它非常简洁,你使用Route
组件,给它一个path
, 和一个component
来渲染。
推荐阅读
- oracle - Oracle Apex 中的 wkhtmltopdf
- r - 如何将重复的字母替换为一个
- c# - 对抽象类 c# 的非静态方法的通用调用
- android - Linux中的Android Studio模拟器错误
- web-services - 通过 url 调用 web 服务
- python - 使用 nginx 的数据发布未正确排序
- node.js - Express Node JS + HTTP 协议:通过请求/响应发送图像
- javascript - 在 React 中解构 state/props
- ruby-on-rails - 您的 Ruby 版本是 2.5.1,但您的 Gemfile 指定了 2.4.0
- c++ - 使用 ODBC 获取真实数据类型,将数据转换为更高精度