Posts React Router(路由)
Post
Cancel

React Router(路由)

简介


官方简介

  • React Router 是一个基于 React 之上的强大路由库,它可以让你向应用中快速地添加视图和数据流,同时保持页面与 URL 间的同步。

个人理解

  • 也就是将这个”网页”/”网站”,变得更加组件化,使元素树结构更加直观。

安装

  • 以下二选一

    1
    2
    
    $ npm install --save react-router-dom
    $ yarn add react-router-dom
    

内置包


1
import { Link, NavLink, Switch, Route, BrowserRouter } from 'react-router-dom'
  • 作用与 a 标签类似:

    将网页地址渲染为 “目标地址”(最终会被渲染为a元素)

    可以理解为一个索引,仅仅是一个索引,如果 route 中没有对应的path,该标签无效。

    NavLink是在Link的基础上增加了一些样式属性。

    1
    2
    3
    4
    5
    6
    7
    
    /*
    * to属性:在根目录的基础上将 value 添加到尾部并渲染地址栏。
    * activeClassName属性:动态的 class ,NavLink 特有,根据点击的位置将该属性放在对应的标签上。
    */
    <NavLink to="/home" activeClassName="active">Home</NavLink>
    <NavLink to="/article">Article</NavLink>
    <NavLink to="/about">About</NavLink>
    

Route

  • 根据路由中地址的变化,将与当前路由地址对应的组件渲染到APP中。

    1
    2
    3
    4
    5
    6
    7
    
    /*
    * path: 与 link/NavLink 的地址相对应。
    * compoent: 写好的页面组件,放在这个位置,在路由地址变为path中的地址后即可直接渲染出对应组件的页面。
    */
    <Route path="/home" component={Home} />
    <Route path="/article" component={Article} />
    <Route path="/about" component={About} />
    

Redirect

  • 重定向,跳向这个标签中的 to 属性中的地址。

    1
    2
    3
    4
    5
    
    /*当用户,账户密码输入正确后,重定向到登陆成功界面*/
    <Redirect to="/login" />
    /*当用户输入了不属于路由中定义过的地址时,重定向到404或者默认地址*/
    <Redirect to="/home" />
    <Redirect to="/notfound" />
    

Switch

  • 根据这个组件的名字的意思可以知道,就是选择。

  • “地址相同的链接该如何判断”,Switch 会进行判断。

  • Switch 渲染第一个被 location 匹配到的并且作为子元素的 </kbd> 或者 </kbd>

    一般动态路由经常会出现这种问题。

    1
    2
    3
    4
    5
    6
    
    <Switch>
        <Route path='/home' component={Home} />
        <Route path='/about' component={About} />
        <Route path='/article' component={Article} />
        <Redirect to='/home' />
    </Switch>
    

Router

  • React-Router时在history基础上实现了URL的UI同步,其URL对应的是location,UI对应的是React component。

通俗的说也就是,当页面地址栏中的地址在 经过不同的API转换后 与路由中的地址相同时,渲染出路由中所传入的组件。

并且:router一般要将所有router其他组件包起来。

BrowserRouter

  • 通过 通过HTML5的history API,让页面的 UI 与 URL 同步,最终地址呈现结果与路由中的地址是一样的。

    1
    2
    3
    
    <BrowserRouter>
    	<App />
    </BrowserRouter>
    

HashRouter(一般不用)

  • HashRouter使用的是URL的hash部分(即window.location.hash),来保持页面的UI与URL的同步。

    1
    2
    3
    4
    
    <HashRouter>
    	<APP />
    </HashRouter>
    // 最终地址栏会有一个# localhost:3000/#/
    

传值方法


params传值

1
2
<Link to={`/api1/${data}`} className="" ></Link>
<Route path='/api/:data' component={} ></Route>

取值

1
const {data} = this.props.match.params;

search传值

1
2
<Link to={`/api1/?data=${data}`} className="" ></Link>
<Route path='/api' component={} ></Route>

取值

1
2
3
//.search的值中带有"?",需要去掉并转换为字符串(querystring)
import qs from 'querystring'
const {data} = qs.parse((this.props.location.search).slice(1))

state传值

1
2
3
4
<Link to={ { pathname: 'api后缀', state: { data: data } } } className="">
	链接名
</Link>
<Route path='/api1' component={} />

取值

1
const {data} = this.props.location.state

路由跳转

通过按钮的点击事件来举例

1
2
//button
<button onClick={() => this.seeMore(data)}>more</button>

history.push

传入match.params
1
2
3
seeMore = (data)=>{
    this.props.history.push(`/api1/${data}`)
}
传入location.search
1
2
3
seeMore = (data)=>{
    this.props.history.push(`/api1/?data=${data}`)
}
传入location.state
1
2
3
seeMore = (data)=>{
    this.props.history.push('/api1', { data } )
}

参考文章

This post is licensed under CC BY 4.0 by the author.

SQL基础——视图、索引、事务

React Axios(请求)

Comments powered by Disqus.