1、新增知識
/* 實現js跳轉路由:https://reacttraining.com/react-router/web/example/auth-workflow 1、要引入Redirect import { BrowserRouter as Router,Route,Link,Redirect, withRouter } from "react-router-dom"; 2、定義一個flag this.state = { loginFlag:false }; 3、render里面判斷flag 來決定是否跳轉 if(this.state.loginFlag){ return <Redirect to={{ pathname: "/" }} />; } 4、要執行js跳轉 通過js改變loginFlag的狀態 改變以后從新render 就可以通過Redirect自己來跳轉 */
2、代碼實現案例
import React, { Component } from 'react';
import {Redirect} from "react-router-dom";
class Login extends Component {
constructor(props) {
super(props);
this.state = {
loginFlag:false
};
}
doLogin=(e)=>{
e.preventDefault();//防止跳轉
let username=this.refs.username.value;
let password=this.refs.password.value;
console.log(username,password)
if(username=='admin' && password=='123456'){
//登錄成功 跳轉到首頁
this.setState({
loginFlag:true
})
}else{
alert('登錄失敗')
}
}
render() {
if(this.state.loginFlag){
// return <Redirect to={{ pathname: "/" }} />;
return <Redirect to='/' />;
}
return (
<div>
<br /> <br /> <br />
<form onSubmit={this.doLogin}>
<input type="text" ref="username" /> <br /> <br />
<input type="password" ref="password" /> <br /> <br />
<input type="submit" value="執行登錄"/>
</form>
</div>
);
}
}
export default Login;
3、嵌套路由知識點
return <Route key={key} path={route.path} render={props => ( // pass the sub-routes down to keep nesting <route.component {...props} routes={route.routes} /> )} />
4、嵌套路由案例,App.js
import React, { Component } from 'react';
import { BrowserRouter as Router, Route, Link } from "react-router-dom";
import './assets/css/index.css';
import routes from './model/router.js';
class App extends Component {
render() {
return (
<Router>
<div>
<header className="title">
<Link to="/">首頁組件</Link>
<Link to="/user">用戶頁面</Link>
<Link to="/shop">商戶</Link>
<Link to="/news">新聞</Link>
</header>
{
routes.map((route,key)=>{
if(route.exact){
return <Route key={key} exact path={route.path}
// route.component value.component <User {...props} routes={route.routes} />
render={props => (
// pass the sub-routes down to keep nesting
<route.component {...props} routes={route.routes} />
)}
/>
}else{
return <Route key={key} path={route.path}
render={props => (
// pass the sub-routes down to keep nesting
<route.component {...props} routes={route.routes} />
)}
/>
}
})
}
</div>
</Router>
);
}
}
export default App;
5、router.js文件
let routes = [ { path: "/", component: Home, exact:true }, { path: "/shop", component: Shop }, { path: "/user", component: User, routes:[ /*嵌套路由*/ { path: "/user/", component: UserList }, { path: "/user/add", component: UserAdd }, { path: "/user/edit", component: UserEdit } ] }, { path: "/news", component: News } ]; export default routes;
