路由的使用
- 先在项目中下载react-router-dom
1 | cnpm i react-router-dom --save |
- 在App下引入BrowserRouter跟Route,然后在渲染函数中使用这两个类
- Route中的两个参数
- path:表示url路径
- component:表示这个Route是哪个组件的路由
1 | import React from 'react'; |
- 当一个组件被声明为Route的属性值时,Route会把
history、location、match
三个对象放到props中并传递到组件中,这三个三对象的含义分别是:- history:包含了组件可以使用的各种路由系统的方法,常用的有 push 和 replace,两者都是跳转页面,但是 replace 不会引起页面的刷新,仅仅是改变 url。
- location:相当于URL 的对象形式表示,通过 search 字段可以获取到 url 中的 查询字符串参数值的信息。
- match:包含了具体的 url 信息,在 params 字段中可以获取到各个路由节点参数的值。
BrowserRouter与HashRouter
- BrowserRoute是H5的新特性,它在路由导航时,不需要加#
- HashRouter时锚点路由,需要加#
Link跳转
- Link一般用来做导航,创建一个组件,用来封装导航栏
- Link的to属性表示跳转至哪个路由
- 最后在App中引入这个组件即可
1 | import React from "react" |
exact和strict精致匹配
- 当path属性没有加exact的时候/mine和/mine/ucenter两个路由都会跳转到mine页面,其中/mine/ucenter中包含了两个页面
- 如果只要每个路由的最后一个节点生效,则可加exact=true(exact默认为true)
- 加上strict的目的是为了明确 [路由] 和 [路由]/ 的区别,若不加,这两个路由代表的是一个路由
1 | //换成下面代码 |
404页面和Switch
- 创建一个简单的404页面组件,然后在App引入,这样404组件将会匹配任意路由
- 其实这样是不对的,我们要使输入正确的路由时不出现NotFound页面,需要加上Switch标签
- Switch表示BrowserRouter一次只能展现一个组件页面
1 | import React from "react" |
- 如果加了Switch不加exact的话,则只有第一个节点生效,其他的不生效
render func
- 在Route中可以使用render来替换component,render属性传入的是一个函数,render属性有两种使用方式
- 在render的函数中直接写html
- 在render的函数中写组件,间接渲染html,使用这种方式可以传入参数props,并可以和之前一样传递组件属性值,在组件中使用props来接收属性值
1 | <Route path="/demo" render={()=> |
1 | import React from "react" |
NavLink的使用和高亮
- 一般情况下,我们在使用导航栏的时候,导航栏都会有一个高亮效果来表示被选中的项,这时就可以使用NavLink来替换Link
- 要使活动项应用某些css样式,有三种方式:
- 默认方式,使用NavLink会让标签自动地给活动项添加class=”active”,则可以使用该class设置样式,适合样式较复杂且不同活动项有相同样式的情况
- 使用activeClassName属性,使活动项添加一个手动设置的类名,适合样式较复杂且不同活动项有不同样式的情况
- 使用activeStyle属性,可以,使活动项直接添加css样式,适合样式较少的情况
1 | import React from "react" |
读取Url参数
- 在react中,如果要在Url再加上Url节点参数的话,可以在path属性中添加Url节点参数,例如:
1 | //这里的/:id?/:name?都为节点参数,而其中的?代表该参数可以为空 |
- 然后在Demo中就可以使用props.match读取这两个参数的值
1 | //读取节点参数值 |
读取querystring参数
- 在react中,如果要读取Url中查询字符串参数的值,则有两种方式可以读取:
- 使用URLSearchParams来读取
- 使用第三方库querystring来读取
1 | //提取查询字符串参数值的第一种方式 |
Link to-object
- Link to-object可以设置path携带查询字符串,即在to属性中添加一些其他附带的值:
1 | //这里的Url为http://localhost:3000/mine?sort=name#the-hash |
Redirect重定向
- 如果没有对一个组件声明一个路由,则可以使用Redirect来跳转页面,比如:
1 | import React from "react" |
withRouter
- withRouter在react中是一个高阶组件,作用是将一个组件包裹进
Route
里面, 然后react-router
的三个对象history, location, match
就会被放进这个组件的props
属性中 - 则可以在这个组件中使用
history, location, match
这三个对象
1 | import React from "react" |
Prompt
Prompt
可以用来触发提示信息,when
属性表示触发的条件,而message
表示提示信息的内容
1 | //在这里,当name的值为空时跳转则不会触发提示信息,而不为空时则会触发提示信息 |