08react基础-路由

2021-09-07  本文已影响0人  东邪_黄药师

React路由介绍

现代的前端应用大多数是SPA(单页应用程序),也就是只有一个HTML页面的应用程序。因为它的用户体验更好、对服务器压力更小,所以更受欢迎。为了有效的使用单个页面来管理多页面的功能,前端路由应运而生。

路由的基本使用

使用步骤
import {BrowserRouter as Router, Route, Link} from 'react-router-dom'
<Router>
  <div className="App">
      // … 省略页面内容
  </div>
</Router>
<Link to="/first">页面一</Link>
const First = () => <p>页面一的页面内容</p>
<Router>
   <div className="App">
     <Link to="/first">页面一</Link>
     <Route path="/first" component={First}></Route>
   </div>
</Router>

常用组件说明

<Link to="/first">页面一</Link>
<Route path="/first" component={First}></Route>

路由的执行过程

编程式导航

import React from 'react'
import ReactDOM from 'react-dom'

/* 
  编程式导航
*/

import { BrowserRouter as Router, Route, Link } from 'react-router-dom'

class Login extends React.Component {
  handleLogin = () => {
    // 使用编程式导航实现路由跳转
    // ...省略其他功能代码
    this.props.history.push('/home')
  }
  render() {
    return (
      <div>
        <p>登录页面:</p>
        <button onClick={this.handleLogin}>登录</button>
      </div>
    )
  }
}

const Home = props => {
  const handleBack = () => {
    // go(-1) 表示返回上一个页面
    props.history.go(-1)
  }
  return (
    <div>
      <h2>我是后台首页</h2>
      <button onClick={handleBack}>返回登录页面按钮</button>
    </div>
  )
}

const App = () => (
  <Router>
    <div>
      <h1>编程式导航:</h1>
      <Link to="/login">去登录页面</Link>

      <Route path="/login" component={Login} />
      <Route path="/home" component={Home} />
    </div>
  </Router>
)

ReactDOM.render(<App />, document.getElementById('root'))

默认路由

<Route path="/" component={Home} />

匹配模式

1.模糊匹配模式
path 代表Route组件的path属性
pathname 代表Link组件的to属性(也就是 location.pathname)
image.png

精准匹配

// 此时,该组件只能匹配 pathname=“/” 这一种情况
<Route exact path="/" component=... />

案例:

import React from 'react'
import ReactDOM from 'react-dom'

/* 
  模糊匹配模式
*/

import { BrowserRouter as Router, Route, Link } from 'react-router-dom'

const Home = () => <p>进入页面的时候,你能看到我吗?</p>
const Login = () => <p>我是Login组件的内容</p>

const App = () => (
  <Router>
    <div>
      <h1>默认路由</h1>
      <ul>
        <li>
          <Link to="/">首页</Link>
        </li>
        <li>
          <Link to="/login">登录页面</Link>
        </li>
      </ul>

      {/* 默认路由,添加 exact 属性,就会让当前路由变为精确匹配 */}
      <Route exact path="/" component={Home} />
      <Route path="/login" component={Login} />
    </div>
  </Router>
)

ReactDOM.render(<App />, document.getElementById('root'))
上一篇 下一篇

猜你喜欢

热点阅读