如何在 React JS 中进行路由
How to do a routing in react js
我正在研究 raact js POC。我将登陆页面作为登录页面,然后想将用户重定向到下一页。我在 index.js 文件中有以下代码。
import ReactDOM from 'react-dom';
import React from 'react';
import './index.css';
import App from './App';
import { Route, Link, BrowserRouter as Router } from 'react-router-dom'
import LoginComponent from "./Components/LoginComponent";
import User from "./Components/User";
const routing = (
<Router>
<div>
<Route path="/" exact component={LoginComponent} />
<Route path="/LoginComponent" component={LoginComponent} />
<Route path="/User" component={User} />
</div>
</Router>
)
ReactDOM.render(routing, document.getElementById("root"));
我在 LoginComponent.js 文件中有以下代码。事情是我在控制台中也没有收到任何错误。当我单击发布到服务器的登录按钮页面时,我再次获得相同的登录屏幕。我不确定这里出了什么问题。
import { FormGroup } from "react-bootstrap";
import { Redirect } from 'react-router-dom';
import "./Login.css"
import "bootstrap/dist/css/bootstrap.min.css";
import User from "./User"
class LoginComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
username: this.props.username,
password: this.props.password,
loggedIn : false
}
this.handleValidation = this.handleValidation.bind(this);
this.handleChange = this.handleChange.bind(this);
}
//assign textbox values to props
handleChange = (e) => {
this.setState({
[e.target.name]: [e.target.value]
})
}
//handle input validation
handleValidation = (event) => {
if (!this.state.username) {
this.setState({ error: 'Please enter User Name' });
event.preventDefault();
}
else if (!this.state.password) {
this.setState({ error: 'Please enter Password' });
event.preventDefault();
}
else {
this.setState({ error: "" });
//my login service code here which is working fine. I can see a response in console.
this.setState({ loggedIn: true });
this.props.history.push("/User");//this line is not working.
}
}
render() {
return (
<div className="Login">
<form >
<FormGroup controlId="email" bsSize="large">
<label htmlFor="exampleInputUserName"><b>User Name</b></label>
<input type="username" name ="username" className="form-control" id="exampleInputUserName" value={this.props.userName} onChange={this.handleChange} placeholder="Enter User Name"></input>
<div><br></br></div>
</FormGroup>
<FormGroup controlId="password" bsSize="large">
<label htmlFor="exampleInputPassword"><b>Password</b></label>
<input type="password" name="password" className="form-control" id="exampleInputPassword" value={this.props.password} onChange={this.handleChange} placeholder="Enter Password"></input>
<div><br></br></div>
</FormGroup>
<button type="submit" onClick={this.handleValidation} className="btn btn-info">Login</button>
<button type="submit" className="btn btn-danger">Cancel</button>
<div><br></br></div>
<div id="errorDiv">
{(this.state.error !== '') ? <span style={{ color: "red" }}>{this.state.error}</span> : ''}
</div>
</form>
</div>
)
}
}
export default LoginComponent;
使用 withRouter 高阶组件,并用它包装您的组件。它会给你路由器道具,然后可以用来推送到你想要的路线。
查看文档以获取更多信息:https://reacttraining.com/react-router/web/api/withRouter
希望这能解决
A link 到沙箱:https://codesandbox.io/s/react-example-1h7jy
import { FormGroup } from "react-bootstrap";
import { Redirect } from 'react-router-dom';
import "./Login.css"
import "bootstrap/dist/css/bootstrap.min.css";
import User from "./User";
import { withRouter } from "react-router-dom";
class LoginComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
username: this.props.username,
password: this.props.password,
loggedIn : false
}
this.handleValidation = this.handleValidation.bind(this);
this.handleChange = this.handleChange.bind(this);
}
//assign textbox values to props
handleChange = (e) => {
this.setState({
[e.target.name]: [e.target.value]
})
}
//handle input validation
handleValidation = (event) => {
if (!this.state.username) {
this.setState({ error: 'Please enter User Name' });
event.preventDefault();
}
else if (!this.state.password) {
this.setState({ error: 'Please enter Password' });
event.preventDefault();
}
else {
this.setState({ error: "" });
//my login service code here which is working fine. I can see a response in console.
this.setState({ loggedIn: true });
this.props.history.push("/User");//this line is not working.
}
}
render() {
return (
<div className="Login">
<form >
<FormGroup controlId="email" bsSize="large">
<label htmlFor="exampleInputUserName"><b>User Name</b></label>
<input type="username" name ="username" className="form-control" id="exampleInputUserName" value={this.props.userName} onChange={this.handleChange} placeholder="Enter User Name"></input>
<div><br></br></div>
</FormGroup>
<FormGroup controlId="password" bsSize="large">
<label htmlFor="exampleInputPassword"><b>Password</b></label>
<input type="password" name="password" className="form-control" id="exampleInputPassword" value={this.props.password} onChange={this.handleChange} placeholder="Enter Password"></input>
<div><br></br></div>
</FormGroup>
<button type="submit" onClick={this.handleValidation} className="btn btn-info">Login</button>
<button type="submit" className="btn btn-danger">Cancel</button>
<div><br></br></div>
<div id="errorDiv">
{(this.state.error !== '') ? <span style={{ color: "red" }}>{this.state.error}</span> : ''}
</div>
</form>
</div>
)
}
}
export default withRouter(LoginComponent);
我正在研究 raact js POC。我将登陆页面作为登录页面,然后想将用户重定向到下一页。我在 index.js 文件中有以下代码。
import ReactDOM from 'react-dom';
import React from 'react';
import './index.css';
import App from './App';
import { Route, Link, BrowserRouter as Router } from 'react-router-dom'
import LoginComponent from "./Components/LoginComponent";
import User from "./Components/User";
const routing = (
<Router>
<div>
<Route path="/" exact component={LoginComponent} />
<Route path="/LoginComponent" component={LoginComponent} />
<Route path="/User" component={User} />
</div>
</Router>
)
ReactDOM.render(routing, document.getElementById("root"));
我在 LoginComponent.js 文件中有以下代码。事情是我在控制台中也没有收到任何错误。当我单击发布到服务器的登录按钮页面时,我再次获得相同的登录屏幕。我不确定这里出了什么问题。
import { FormGroup } from "react-bootstrap";
import { Redirect } from 'react-router-dom';
import "./Login.css"
import "bootstrap/dist/css/bootstrap.min.css";
import User from "./User"
class LoginComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
username: this.props.username,
password: this.props.password,
loggedIn : false
}
this.handleValidation = this.handleValidation.bind(this);
this.handleChange = this.handleChange.bind(this);
}
//assign textbox values to props
handleChange = (e) => {
this.setState({
[e.target.name]: [e.target.value]
})
}
//handle input validation
handleValidation = (event) => {
if (!this.state.username) {
this.setState({ error: 'Please enter User Name' });
event.preventDefault();
}
else if (!this.state.password) {
this.setState({ error: 'Please enter Password' });
event.preventDefault();
}
else {
this.setState({ error: "" });
//my login service code here which is working fine. I can see a response in console.
this.setState({ loggedIn: true });
this.props.history.push("/User");//this line is not working.
}
}
render() {
return (
<div className="Login">
<form >
<FormGroup controlId="email" bsSize="large">
<label htmlFor="exampleInputUserName"><b>User Name</b></label>
<input type="username" name ="username" className="form-control" id="exampleInputUserName" value={this.props.userName} onChange={this.handleChange} placeholder="Enter User Name"></input>
<div><br></br></div>
</FormGroup>
<FormGroup controlId="password" bsSize="large">
<label htmlFor="exampleInputPassword"><b>Password</b></label>
<input type="password" name="password" className="form-control" id="exampleInputPassword" value={this.props.password} onChange={this.handleChange} placeholder="Enter Password"></input>
<div><br></br></div>
</FormGroup>
<button type="submit" onClick={this.handleValidation} className="btn btn-info">Login</button>
<button type="submit" className="btn btn-danger">Cancel</button>
<div><br></br></div>
<div id="errorDiv">
{(this.state.error !== '') ? <span style={{ color: "red" }}>{this.state.error}</span> : ''}
</div>
</form>
</div>
)
}
}
export default LoginComponent;
使用 withRouter 高阶组件,并用它包装您的组件。它会给你路由器道具,然后可以用来推送到你想要的路线。
查看文档以获取更多信息:https://reacttraining.com/react-router/web/api/withRouter
希望这能解决
A link 到沙箱:https://codesandbox.io/s/react-example-1h7jy
import { FormGroup } from "react-bootstrap";
import { Redirect } from 'react-router-dom';
import "./Login.css"
import "bootstrap/dist/css/bootstrap.min.css";
import User from "./User";
import { withRouter } from "react-router-dom";
class LoginComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
username: this.props.username,
password: this.props.password,
loggedIn : false
}
this.handleValidation = this.handleValidation.bind(this);
this.handleChange = this.handleChange.bind(this);
}
//assign textbox values to props
handleChange = (e) => {
this.setState({
[e.target.name]: [e.target.value]
})
}
//handle input validation
handleValidation = (event) => {
if (!this.state.username) {
this.setState({ error: 'Please enter User Name' });
event.preventDefault();
}
else if (!this.state.password) {
this.setState({ error: 'Please enter Password' });
event.preventDefault();
}
else {
this.setState({ error: "" });
//my login service code here which is working fine. I can see a response in console.
this.setState({ loggedIn: true });
this.props.history.push("/User");//this line is not working.
}
}
render() {
return (
<div className="Login">
<form >
<FormGroup controlId="email" bsSize="large">
<label htmlFor="exampleInputUserName"><b>User Name</b></label>
<input type="username" name ="username" className="form-control" id="exampleInputUserName" value={this.props.userName} onChange={this.handleChange} placeholder="Enter User Name"></input>
<div><br></br></div>
</FormGroup>
<FormGroup controlId="password" bsSize="large">
<label htmlFor="exampleInputPassword"><b>Password</b></label>
<input type="password" name="password" className="form-control" id="exampleInputPassword" value={this.props.password} onChange={this.handleChange} placeholder="Enter Password"></input>
<div><br></br></div>
</FormGroup>
<button type="submit" onClick={this.handleValidation} className="btn btn-info">Login</button>
<button type="submit" className="btn btn-danger">Cancel</button>
<div><br></br></div>
<div id="errorDiv">
{(this.state.error !== '') ? <span style={{ color: "red" }}>{this.state.error}</span> : ''}
</div>
</form>
</div>
)
}
}
export default withRouter(LoginComponent);