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;