react-router 4.x 常见用法示例

常用组件及方法全部整合进一个demo中。
主要涉及的概念有:

  • HashRouter 与 BrowserRouter
  • Route
  • children 和 render 创建地址与组件的关系
  • Link 与 NavLink
  • Switch
  • 页面传参
  • 路由嵌套
  • Redirect

目录如下:
react-router 4.x 常见用法示例_第1张图片
主要的文件有 index.html, index.css, index.js,主要呈现下以下三个文件,以便大家快速上手。

index.html


<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Documenttitle>
head>
<body>
    <div id="app">div>
body>
html>

index.css

.selected{
     
    color: red;
    background-color: #ccc;
}

.box{
     
    border: #ccc solid 1px;
    margin: 5px;
}

index.js

import React,{
     Component} from 'react'
import ReactDOM from 'react-dom'
// import {BrowserRouter as Router,Route,Link,Redirect,Switch} from 'react-router-dom'
import {
     HashRouter as Router,Route,Link,Redirect,Switch, NavLink,withRouter} from 'react-router-dom'

import './index.css'

class Home extends Component{
     
    render(){
     
        // 此三个属性:history,location,match 一般在跳转页面时生成的,初始页面则没有。可通过 withRouter 方法实现。
        console.log(this.props)
        return (
            <div>
                <h1>Home</h1>

                {
     /* Link 用于跳转页面 */}
                <li><Link to='/About/1'>About</Link></li>
                <li><Link to='/Info'>Info</Link></li>
                <li><Link to='/Children'>Children</Link></li>
                <li><Link to='/Render'>Render</Link></li>

                {
     /* 可通过 NavLink 来改变激活目录的样式 */}
                {
     /* 
  • About
  • Info
  • */
    } </div> ) } } function About(props){ // 使用路由后,会传递三个属性:history,location,match console.log(props) return <h1 className='box'>About</h1> } class UserDetail extends Component{ to = (path)=>{ console.log(this.props) // 第二个参数可用于传参,在跳转页面中 props 的 Location 对象的 state 属性中 // 此方法两种模式都可以用,但是传参只有在 Browser 模式下有效 // this.props.history.push(path,{a:1}) // 另一种跳转页面方式,只对 hash 模式有效,利于 hash 模式的页面传参 location.hash = '/About/1' // console.log(location.hash) } render(){ return ( <div className='box'> <h1>user detail</h1> <li>ID: { this.props.match.params.id}</li> <li>name: { this.props.match.params.name}</li> <button onClick={ ()=>this.to('/About')}>跳转至About页面</button> </div> ) } } class Info extends Component{ render(){ // 使用路由后,会传递三个属性:history,location,match // console.log(this.props) return ( <div className='box'> <h1>Info</h1> <li><Link to='/Info/detail/1/xiaoming'>小明</Link></li> <li><Link to='/Info/detail/2/xiaohua'>小华</Link></li> { /* 传递多个参数 */} <Route path='/Info/detail/:id/:name' component={ UserDetail}></Route> </div> ) } } // 使用 withRouter let WithRouterAPP = withRouter(Home) ReactDOM.render(<Router> { /* */} <Home></Home> { /* Switch 只显示最先符合地址匹配的页面 */} <Switch> <Route path='/About/:id' component={ About}></Route> <Route path='/Info' component={ Info}></Route> <Route path='/Render' render={ (props)=>{ // console.log(props) return (<div className='box'><h1>Render</h1>只有符合当前URL符合匹配时才会跳转</div>) }}></Route> <Route path='/Children' children={ (props)=>{ // console.log(props) return (<div className='box'><h1>Children</h1>每次页面跳转都会触发此组件,可以通过传入的props参数中的match属性来查看当前地址是否符合匹配</div>) }}></Route> <Route path='/' render={ (props)=>{ return <h1>首页</h1>}}></Route> { /* 重定向 */} <Redirect to='/'></Redirect> </Switch> </Router>,document.getElementById('app') )

    你可能感兴趣的:(前端web,reactjs)