React:路由(二级路由)

路由: npm install react-router-dom --save

App.js

import React, { Component } from 'react';
// import logo from './logo.svg';
import './App.css';

// 导入路由模板
// Route:定义一条路由规则
// Switch/Router:在Switch/Router组件中定义多条路由规则,和Route配合使用
// HashRouter/BrowserRouter:hashHistory/browserHistory,两种路由跳转history模式
// Link:路由跳转的组件(类似vue路由中的router-link)
import {Route,HashRouter,Link,Switch} from "react-router-dom"

// 导入四个页面
import Home from "./views/Home/Home"
import User from "./views/User/User"
import Game from "./views/Game/Game"
import NotFound from "./views/NotFound/NotFound"
import Student from "./views/User/Student/Student"
import Teacher from "./views/User/Teacher/Teacher"

class App extends Component {
  constructor(props){
    super(props);
    this.state = {
      active: 0
    }
  }
  render() {
    return (
      <div>
        {/* HashRouter组件是路由视图,类似vue中的router-view */}
        <HashRouter>
          {/* 导航条 */}
          <ul className="App-list">
            <li><Link to="/" className={this.state.active===0?"App-active":""} index={0} onClick={this.navClick}>首页</Link></li>
            <li><Link to="/user" replace className={this.state.active===1?"App-active":""} index={1} onClick={this.navClick}>用户</Link></li>
            <li><Link to="/game" className={this.state.active===2?"App-active":""} index={2} onClick={this.navClick}>游戏</Link></li>
          </ul>

          <main>
            {/* 定义路由规则:Switch中嵌套Route */}
            <Switch>
              {/* react中的路由匹配采用的是开头匹配法。1.可以考虑把路径path="/"放到规则的最后面 2.把匹配改为精准(严格)匹配,添加属性exact即可 */}
              <Route exact path="/" component={Home} />
              <Route path="/user" render={props=>
                <User>
                  <Route exact path="/user" component={Student} /> 
                  <Route path="/user/teacher" component={Teacher} /> 
                </User>
              } /> 
              <Route path="/game" component={Game} /> 
              {/* 如果不设置path属性,可以匹配到任何路径,用于设置404页面(放到所有规则的最后面) */}
              <Route component={NotFound}></Route>

              {/* ps:Warning: Hash history cannot PUSH the same path; a new entry will not be added to the history stack 原因:这个是 reactr-router 的一个提示,当前路由下的 history 不能 push 相同的路径到 stack 里。只有开发环境存在,生产环境不存在,目前还没看到官方有去掉的意思。看不惯的话可以采取一些方法关掉这个提示。*/}
              {/* 解决:添加上replace <Link to={{ pathname: "/app/studyMapModule/detail" }} replace>detail</Link>  */}
              {/* 解决:But you should only get this warning in development. If you generate your production build correctly (using NODE_ENV=production) you shouldn't see this warning in production. */}
            </Switch>
          </main>
        </HashRouter>
      </div>
    );
  }

  navClick = (e)=>{
    this.setState({
      active: e.target.getAttribute("index")*1
    });
  }
}

export default App;

User.js

import React, { Component } from 'react';
import './User.css';
import {Link} from "react-router-dom"

class User extends Component {
  render() {
    return (
      <div className="root User">
        <h1>用户</h1>
        <input type="text"/>
        <div className="User-Content">
          {/* 竖向导航条 */}
          <ul className="User-List">
            <li><Link to="/user">学生</Link></li>
            <li><Link to="/user/teacher">老师</Link></li>
          </ul>
          {/* 导航条对应的内容 */}
          <div className="User-Children">
            {this.props.children}
          </div>
        </div>
        
      </div>
    );
  }

  componentDidMount(){
    console.log("user渲染完成了");
  }
}

export default User;

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React 中,使用 React Router 可以轻松地创建二级路由。下面是一个简单的示例来说明如何创建二级路由: 首先,确保你已经安装了 React Router 库。可以使用以下命令来安装: ``` npm install react-router-dom ``` 接下来,在你的应用程序中导入所需的模块: ```jsx import React from 'react'; import { BrowserRouter as Router, Route, Switch, Link } from 'react-router-dom'; ``` 然后,在你的组件中定义路由。下面是一个示例: ```jsx function App() { return ( <Router> <div> <nav> <ul> <li> <Link to="/">Home</Link> </li> <li> <Link to="/about">About</Link> </li> <li> <Link to="/dashboard">Dashboard</Link> </li> </ul> </nav> <Switch> <Route path="/" exact component={Home} /> <Route path="/about" component={About} /> <Route path="/dashboard" component={Dashboard} /> </Switch> </div> </Router> ); } function Home() { return <h2>Home</h2>; } function About() { return <h2>About</h2>; } function Dashboard() { return ( <div> <h2>Dashboard</h2> <Switch> <Route path="/dashboard/profile" component={Profile} /> <Route path="/dashboard/settings" component={Settings} /> </Switch> </div> ); } function Profile() { return <h3>Profile</h3>; } function Settings() { return <h3>Settings</h3>; } ``` 在上面的示例中,我们创建了一个 `Router` 组件,并在其中定义了导航菜单和路由规则。`Route` 组件用来定义路径和组件的映射关系。`Switch` 组件用来保证只有一个路由匹配成功。 在 `Dashboard` 组件中,我们创建了另一个嵌套的 `Switch` 组件,以支持二级路由。在这个嵌套的 `Switch` 中,我们定义了 `/dashboard/profile` 和 `/dashboard/settings` 这两个路径与对应的组件的映射关系。 最后,将 `App` 组件渲染到 DOM 中: ```jsx ReactDOM.render(<App />, document.getElementById('root')); ``` 通过以上代码,你就可以在你的应用程序中创建二级路由了。在导航菜单中点击链接将会渲染相应的组件。例如,点击 `/dashboard` 将会显示 `Dashboard` 组件,点击 `/dashboard/profile` 将会显示 `Profile` 组件。 希望这个示例能帮助你理解如何在 React 中创建二级路由。如有其他问题,请随时提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值